2009-04-20 15 views
1

Ich lerne Ruby in meiner Freizeit, und ich habe eine Frage über Sprachkonstrukte für Konstanten. Hat Ruby ein Äquivalent des C++ const-Schlüsselworts, um zu verhindern, dass Variablen geändert werden? Hier einige Beispiel-Code:Ruby-Äquivalent von C++ Const?

first_line = f.gets().chomp() 
column_count = first_line.split(%r{\s+}).size() 
print column_count, "\n" 

Ich mag würde column_count erklären const zu sein, weil ich es unten in meinem Programm verwenden, und ich möchte wirklich nicht, es versehentlich ändern. Bietet Ruby dafür ein Sprachkonstrukt, oder sollte ich es einfach aufschnappen und erkennen, dass meine Variablen immer änderbar sind?

Antwort auf Kommentare:

‚Die wahrscheinlichste Ursache für‚zufällige‘Überschreiben von Variablen ist, würde ich raten, lange Codeblöcke.‘ Ich stimme dem Geist Ihres Standpunktes zu, widerspreche aber dem Brief. Ihr Argument, lange Codeblöcke und unnötige Zustände zu vermeiden, ist zwar gut, aber für Konstanten kann es auch nützlich sein, das Design von Code innerhalb der Implementierung zu beschreiben. Ein großer Teil des Wertes von const in meinem Code kommt von der Anmerkung, welche Variablen ich ändern sollte und welche nicht, sodass ich nicht versucht bin, sie zu ändern, wenn ich nächstes Jahr zu meinem Code zurückkomme. Dies ist das gleiche Gefühl, das nahelegt, dass Code, der kurze Kommentare wegen guter Variablennamen und klarer Einrückung verwendet, besser ist als ungeschickt geschriebener Code, der durch detaillierte Kommentare erklärt wird.

Eine andere Option scheint Rubys #freeze-Methode zu sein, die mir auch gefällt. Danke für die Antworten jeder.

+0

eine schnelle Google zeigt http://rubylearning.com/satischtalim/ruby_constants.html – cobbal

Antwort

3

Variablen, die mit einem Großbuchstaben beginnen, sind Konstanten in Ruby. So könnten Sie Ihren Code dies ändern:

first_line = f.gets().chomp() 
Column_count = first_line.split(%r{\s+}).size() 
print Column_count, "\n" 

Jetzt wird eine Warnmeldung angezeigt, wenn Sie versuchen, Column_count zu ändern.

+0

Das ist cool. Gibt es eine Möglichkeit, diese Warnung zu einem Fehler zu machen? –

+0

Konvention ist, Konstanten in Großbuchstaben zu schreiben, also in diesem Fall COLUMN_COUNT. –

+1

Nicht das verhindert, dass Sie ändern, welches Objekt Column_count zugewiesen ist. Sie können den internen Status des Objekts noch ändern. Um dies ebenfalls zu verhindern, verwenden Sie #freeze. – rampion

4

Ruby Variablen im Allgemeinen sind, gut, variabel.

Jenseits Jeremys Antwort, obwohl völlig genau, führt Sie nicht zu einem Ruby-Stil, der sehr "Mainstream" oder idiomatisch klingt und ich würde es nicht zur Annahme empfehlen. Ruby funktioniert nicht wie C++ und ist im Allgemeinen nicht sehr geeignet für Dinge, für die C++ am besten geeignet ist. Betriebssysteme, Textverarbeitungsprogramme, so etwas.

Die wahrscheinlichste Ursache für "versehentliches" Überschreiben von Variablen ist, ich denke, lange Blöcke von Code. Wenn Sie schließlich den Wert einer Variablen in einer Fünf-Zeilen-Methode ändern, wird es ziemlich offensichtlich sein! Wenn Sie Code-Blöcke länger als beispielsweise 10 Zeilen schreiben, tun diese Teile wahrscheinlich zu viele Dinge, und ich rate Ihnen dringend, sich darum zu bemühen, diese Blöcke aufzulösen (erhöhen Sie cohesion). Lokalisieren Sie Variablen so weit wie möglich, um die Möglichkeit unerwarteter Nebenwirkungen zu minimieren (reduzieren Sie coupling).

4

Laut Konvention werden Konstanten in Ruby im Allgemeinen in Großbuchstaben geschrieben, z. B. COLUMN_COUNT. Aber wie bereits erwähnt, sind alle Variablen, die mit einem Großbuchstaben beginnen, Konstanten.