Frage

Angenommen, Sie haben eine Variable mit dem Namen hotelPropertyNumber . Der Inhalt wird immer eine Zahl sein, aber normalerweise als Zeichenfolge verwendet werden. Gäbe es etwas „falsch“ sein mit ihm als String deklarieren, damit Sie sie müssen in eine Zeichenfolge nicht ständig wandeln .... oder ist das eine schlechte Programmierung Gewohnheit?

Danke.

War es hilfreich?

Lösung

Eine Zahl ist ein mathematisches Objekt in Zählen und Messen verwendet. Wenn Sie Ihre hotelPropertyNumber zum Zählen verwendet werden, das heißt gelten alle arithmetischen Operationen, um es, es ist Nummer und sollte als numerischer Typ gespeichert werden.

Wenn nicht, dann ist es nicht eine Zahl; es ist eine Zeichenfolge.

Andere Tipps

In einigen Sprachen können Sie einen benutzerdefinierten Typen wie „class HotelPropertyNumber“ erstellen, die:

  • Unterstützung genau die Methoden, die Sie benötigen
  • speichern kann seine Daten intern als String
  • Kann bestätigen (in seinem Konstruktor), dass sein Wert ein Zahlen wie Syntax
  • Kann nicht mit anderen Nummer und / oder String-Typ Instanzen verwechselt werden, die nicht HotelPropertyNumber Instanzen.

Bewahren Sie Ihre Informationen in seiner einfachsten Form. In diesem Fall ist eine ganze Zahl. Konvertieren Sie es in einen String, wenn notwendig. Fast alle Sprachen fast schmerzlos machen dies, vor allem für eine ganze Zahl in einen String.

Ein gutes Beispiel dafür war in dem Stackoverflow Podcast # 58 , wenn Jeff den Titel der HTML-Code in der Datenbank und nicht nur den Titel von selbst gespeichert. Dies verursacht eine Menge Probleme, wenn er wollte, Funktionen hinzuzufügen später und dass der Titel anzuzeigen, in dem HTML wurde nicht benötigt.

ChrisW bringt auch einen großen Punkt, dass dies zu tun behauptet Typsicherheit . Ich dachte, das war wichtig genug, um zu beachten.

Es hängt davon ab, was man mit ihnen machen will.

Sie werden wahrscheinlich nie Arithmetik gehen auszuführen auf sich, aber wie über das Sortieren? Ganze Zahlen werden in einer anderen Art und Weise sortieren als Strings werden. Wollen Sie sie 1, 10, 2, usw. sein? Wenn nicht, dann ganze Zahlen verwenden oder eine spezielle Sortiermethode.

Auf der anderen Seite, Strings werden später für mehr Arten von „Zahlen“ ermöglichen. "10090A", zum Beispiel. Und es wird keine Probleme mit Überlauf sein, wie mit ganzen Zahlen passieren kann.

Igor Krovokon es schon gesagt, aber ich wollte ein bisschen erarbeiten.

Warum denken Sie, die Inhalte einer Hotelnummer ist eine Zahl? „12“ ist keine Zahl. Es ist eine Zeichenfolge, ein paar Ziffern enthalten. Sie können nicht die Quadratwurzel Raum # nehmen 153, aber man kann es mit der Nummer 153 tun.

Ein Hotel Zimmernummer nicht verhalten als Zahl. Eine Zahl ist ein mathematisches Konzept und kann textlich in vielen verschiedenen Arten dargestellt werden. 14 könnte in römischen Zahlen XIV geschrieben werden, "vierzehn", oder 0xfe in hex, oder 11111110 in binärer. Aber das Personal ist wahrscheinlich, dass Ihnen einen sehr seltsamen Blick geben, wenn Sie fragen Sie nach „Zimmer eins-eins-eins-eins-eins-eins-Eins-Null.“

Hotelzimmernummern sind nicht mathematische Zahlen, also sollten sie nicht als ganze Zahlen dargestellt werden.

Sind sie Zeichenfolge dann? Ja, mehr oder weniger, aber sie haben ein paar zusätzliche Einschränkungen haben, wie Sie bemerkt.

Nicht jeder String eine gültige Hotelnummer. "14" ist gut, aber "Wassermelone" nicht.

Am besten, es sollte als abstrakten Datentyp dargestellt werden, die einen String Wraps, und stellt sicher, dass keine nicht-Ziffern in der Zeichenfolge vorhanden ist.

In der Praxis natürlich ist es unwahrscheinlich, in viele Probleme laufen, wenn Sie den einfachen Weg nehmen zwar heraus, und Zimmernummern entweder als ints oder Strings darstellen. Aber das beste Design wäre ein, dass die Zimmernummern mit Zimmernummern verhalten gewährleistet. Weder Strings oder Ints tun.

Ich bin mit @Eric. Sie werden feststellen, dass, wenn Sie es als String deklarieren werden Sie Fehler machen, entweder es als int Parsen, oder es als int zusetzen. Verwenden Sie einfach einen int.

Nein nicht unbedingt falsch. Aber möchten Sie vielleicht die Variable betrachten Umbenennung zu reflektieren, dass es eine Zeichenfolge ist. Ich glaube nicht, gibt es eine einfache Antwort, ob Sie es sich um eine Nummer behalten sollte oder es in eine Zeichenfolge zu konvertieren. Es hängt von der Situation ab. Wenn Sie speichern es als eine ganze Zahl in Ihrer Anwendung auswählen und es in einen String 1000 Mal in Ihrem Code umwandeln müssen, dann könnte es sich lohnen, tun die Umwandlung in einen String einmal. Sie müßten die Abwägungen berücksichtigen, je nach Situation.

Ich bin nicht einverstanden mit Eric.

Es gibt keine "Always" Regeln in der Entwicklung.

Wenn Sie diese Variable verwenden, in erster Linie als String, dann macht es mehr Sinn, es zu speichern als eine Zeichenfolge, und verliert die „Nummer“ aus dem Variablennamen.

Wenn Sie mehr numerische Operationen für diese Variable zu tun, dann ist es eine Zahl, und sollte als numerischer Wert gespeichert werden und konvertiert eine Zeichenfolge für die Verwendung als String zurück.

Wäre es sinnvoll, den Namen zu hotelPropertyIdentifier ändern? Das könnte vermeiden alle Konnotationen Aufruf some eine Zahl.

Sie können jederzeit einen öffentlichen „HotelPropertyNumber ()“ machen-Funktion, die die Nummer als String zurückgibt, aber die int noch unter der Decke gehalten wird.

Wenn Sie sich entscheiden, Sie wirklich die int unter der Decke nicht benötigen, HotelPropertyNumber () kann nur das private String zurück.

Sie nie sagen immer. Es kann nicht immer durch Ziffern dargestellt werden. 14 kann zum Beispiel unterteilt in 14a und 14b werden. Oder 21 und 22 können in 21-22 zusammengeführt werden. Es ist wahrscheinlicher, als mit ihnen Arithmetik zu tun.

Blick auf der Straße Adressen, die in der Regel mit der Absicht des Seins numerischen beginnen. (Pretty Analogie auch.)

Es ist nicht eine schlecht Gewohnheit per se, aber es könnte später zu Problemen führen.

Beim Reden jetzt aus eigener Erfahrung: Ich bin ein großer Fan von Speicher numerische Werte sein, die immer als String in String-Variablen verwendet werden würden. Ich meine, warum nicht, nicht wahr? Speichert Sie das ganze langweilige Casting und so weiter, und Sie können mit dem realen Fleisch des Problems auf. (Was natürlich, ist zu entscheiden, was für das Mittagessen zu bestellen.)

Dann habe ich den größten Teil des Tages, warum wurde das Live-System, um herauszufinden, alle Arten von insane Ausnahmen werfen. Es stellte sich heraus, dass „1“ Ich betrachtete in der Daten war wirklich ein kleines „l“.

Und dann, wie sie sagen, ich erleuchtet wurde.

(Natürlich kann das wirklich sich ändern, welche Sprache Sie sind in. In so etwas wie Java, ein paar Zeilen wert von Klassendefinition alle diese Probleme zu lösen. In Python oder Perl, stellt sich die Frage nicht einmal etwas bedeuten -.. die Sprache nur „macht es richtig:“ Nun, für einige Definition von „rechts“, sowieso)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top