Wie lang sollte ein Variablenname maximal sein?
-
Namenslänge schrieb:
Allerdings ist temperatur_celsius sehr lange und stört beim Coden, weil man so viel tippen muß.
Mit einer IDE, deren Texteditor Autovervollständigung kann, ist das kein Problem.
EDIT: Mal wieder zu langsam... ich brauche Kaffee
-
Wenn ich gerade eine Funktion schreibe, die mit 6 Variablen auskommt, dann bevorzuge ich
int t
gegenueberint temperatur_celsius
und mache es durch ein Kommentar deutlich. Auch ist es nur eine Seite der Medaille, wenn die IDE Autovervollstaendigung unterstuetzt. Der Anteil von Code-Lesen gegenueber Code-Schreiben ist viel groesser. (Zu)Lange Variablennamen sind da eher hinderlich. Und wenn es wichtig ist, wuerde ich die physikalische Groesse als auch Einheit nicht im Variablennamen codieren sondern im Typ. Darueberhinaus enthaelt der Name sehr viel Redundanz: Wenn von Celsius gesprochen wird, dann geht es offensichtlich um Temperatur.Kurz: Von
int temperatur_celsius
odertemperatur_c
halte ich wenig.int celsius
ist ok.
-
knivil schrieb:
wuerde ich die physikalische Groesse als auch Einheit nicht im Variablennamen codieren sondern im Typ.
Meinst du so?
typedef int celsius; celsius messwert1;
Darueberhinaus enthaelt der Name sehr viel Redundanz: Wenn von Celsius gesprochen wird, dann geht es offensichtlich um Temperatur.
Kurz: Von
int temperatur_celsius
odertemperatur_c
halte ich wenig.int celsius
ist ok.Hm, bei celsius ist das einfach, bei exotischen Einheiten würde ich aber schon besser hinschreiben, wofür die genau stehen.
Zum Thema IDE & Autovervollständigung.
Gut, die gibt's zwar, aber wenn man viele Variablen hat die mit den gleichen Worten beginnen, dann kann so etwas schon nerven.
Da tabbed man sich zu Tode, sofern die IDE mit mehreren tabs überhaupt gut klarkommt.
-
Die gleiche Variable brauchst du eh so selten, dann copy & paste halt. Geht sogar ohne IDE-Suche, yay. Ich würde zur Not sogar temp_in_celsius nehmen, interessiert doch niemanden. Solange der Name nicht über die ganze Zeile geht, ist er nicht zu lang.
-
Einfache Regel: Je kleiner der Gültigkeitsbereich der Variablen, desto kürzer kann der Variablenname sein.
-
In einem einfachen Programm würde ich wohl ein einfaches
int temp; // in celcius
nehmen. Wenn ich viel mit verschiedenen Einheiten rechne, dann würde ichs im Typ festhalten.
template <int m, int kg, int s, int A, int K, int mol, int cd> struct base_unit { constexpr base_unit(long double value) : value(value) {} long double value; }; typedef base_unit<0, 0, 0, 0, 1, 0, 0> kelvin; kelvin celcius(double celcius) { return kelvin(celcius + 273.15); } kelvin temp = celcius(...);
-
knivil schrieb:
Kurz: Von
int temperatur_celsius
odertemperatur_c
halte ich wenig.int celsius
ist ok.Da hätte sich mein Physiklehrer die Haare gerauft.
Vgl. "Die Voltzahl ist 55" ggü. "Die Spannung ist 55 Volt"
-
314159265358979 schrieb:
In einem einfachen Programm würde ich wohl ein einfaches
int temp; // in celcius
nehmen. Wenn ich viel mit verschiedenen Einheiten rechne, dann würde ichs im Typ festhalten.
template <int m, int kg, int s, int A, int K, int mol, int cd> struct base_unit { constexpr base_unit(long double value) : value(value) {} long double value; }; typedef base_unit<0, 0, 0, 0, 1, 0, 0> kelvin; kelvin celcius(double celcius) { return kelvin(celcius + 273.15); } kelvin temp = celcius(...);
Hauptsache, kein Mittelmaß finden.
-
314159265358979 schrieb:
In einem einfachen Programm würde ich wohl ein einfaches
int temp; // in celcius
nehmen.
temp
ist vielleicht etwas unglücklich, da das Wort meistens für temporäre Variablen steht.Wenn ich viel mit verschiedenen Einheiten rechne, dann würde ichs im Typ festhalten.
template <int m, int kg, int s, int A, int K, int mol, int cd>
Nicht gut. kg kann man sich noch denken, m und s erschließen sich durch kg. Aber A, K und cd? Ampere, Kelvin und Candela? Da schaden weitere Buchstaben sicher nicht.
-
Michael E. schrieb:
Nicht gut. kg kann man sich noch denken, m und s erschließen sich durch kg. Aber A, K und cd? Ampere, Kelvin und Candela? Da schaden weitere Buchstaben sicher nicht.
Doch. In diesem Kontext ist es sonnenklar, was gemeinmt ist. Mehr Buchstaben wären hier hinderlich. Man soll schon die Standardnamen nehmen, und das sind hier die international üblichen Kürzel der Grundeinheiten.
-
Michael E. schrieb:
314159265358979 schrieb:
In einem einfachen Programm würde ich wohl ein einfaches
int temp; // in celcius
nehmen.
temp
ist vielleicht etwas unglücklich, da das Wort meistens für temporäre Variablen steht.So ist es. temp ist Müll.
Außerdem mut das "in celsius" in den Variablennamen (oder Typ) rein. Ohne so eine Angabe nehme ich automatisch an, daß sie in der Grundeinheit Kelvin ist. edit: Falsch, nur bei Attributen bin ich so pingelig. Lokale Variablen dürfen auch anders.
-
In einem Programm, in dem eine Temperatur vorkommt, kommen auch noch andere Temperaturen vor. Die Frage ist also überhaupt nicht, ob man die Einheit oder was auch immer in den Namen eincodiert, sondern wie man die verschiedenen Bedeutungen auseinanderhält: Temperatur, bei der die Heizung oder Kühlung ein- oder ausgeschaltet werden soll, gemessene Temperatur, geschätzte Temperatur, gewünschte Temperatur tagsüber/abends/nachts, tatsächliche/erwartete Außentemperatur, Temperatur des Leitungswassers/Kühlwassers, Abgastemperatur usw. Ich hab noch keine Temperaturregelung oder sowas programmiert. Aber ich wette, dass die in der Praxis nicht alle das Wort "Temperatur" im Variablennamen haben, und die Einheit schon gar nicht.
-
knivil schrieb:
Wenn ich gerade eine Funktion schreibe, die mit 6 Variablen auskommt, dann bevorzuge ich
int t
gegenueberint temperatur_celsius
und mache es durch ein Kommentar deutlich.Don't comment what you can code. Soll heißen: der Code ist immer richtig. Der Kommentar wandert durch die Zeilen und landet irgendwo, wo er nicht hingehört und erzählt was von "//Temperatur in Celsius", wenn schon lange auf Kelvin umgestellt wurde.
Der Anteil von Code-Lesen gegenueber Code-Schreiben ist viel groesser. (Zu)Lange Variablennamen sind da eher hinderlich.
Zu kurze erst recht. Ich sehs eher selten, dass in einem Variablennamen mehr Info als nötig ist. Und nur dann ist der Name zu lang.
Regel schrieb:
Einfache Regel: Je kleiner der Gültigkeitsbereich der Variablen, desto kürzer kann der Variablenname sein.
314159265358979 schrieb:
nehmen. Wenn ich viel mit verschiedenen Einheiten rechne, dann würde ichs im Typ festhalten.
template <int m, int kg, int s, int A, int K, int mol, int cd>
Ich würde als Template-Parameter nicht die Einheiten, sondern die Dimensionen nehmen. Bei deinem Template kriegt man z.B. mit Litern schon Schwierigkeiten.
template <int length, int mass, int time, int temperature = 0 /* mehr Dimensionen */> class Quantity { /* Speichern des Wertes in SI Grundeinheiten */ double value; }; using Quantity<1, 0, 0> = Length; using Quantity<2, 0, 0> = Area; using Quantity<3, 0, 0> = Volume; using Quantity<1, 0, -1> = Velocity; using Quantity<1, 1, -2> = Force; using Quantity<2, 1, -2> = Energy; using Quantity<0, 1, 0> = Mass; Force operator "" Newton(double n); Length operator "" cm(double l); Length operator "" inch(double l); Length operator "" miles(double l); Velocity operator "" kmh(double 1); Volume operator "" litres(double v); Energy operator "" Joule(double e); Energy operator "" eV(double e); Energy operator "" TeV(double e); Mass operator "" kg(double m); /* etc. */ int main() { auto mySpeed = 54.0kmh; auto myMass = 84.4kg; auto myKineticEnergy = mySpeed * myMass; cout << "my Kinetic Energy \n" << "- in Joule: " << myKineticEnergy / 1.0Joule << '\n' << "- in Electron Volts: " << myKineticEnergy / 1.0eV << '\n; cout << "my Velocity \n" << "- in kmh: " << mySpeed / 1.0kmh << '\n' << "- in inch/sec: " << mySpeed / (1.0inch * 1.0sec) << '\n'; };
-
Minimal ist klar = 1 gültiges Zeichen. Maximal heute (fast) beliebig.
Antwort mit mehreren möglichen Variablennamen:int IchHabeWenigLustZumWeiterenNachdenken; // oder IHWLZWN int MussManSelbstWissen; // oder MMSW int ChefGibtVor; // oder CGV int ProjektVerlangtEineEinheitlicheNamensgebung; // oder PVEEN
-
Namenslänge schrieb:
Meinst du so?
typedef int celsius; celsius messwert1;
Nein!
Ich rede hier von 'Dimensional Analysis in C++' wie sie in boost::mpl zu finden ist.
Da hätte sich mein Physiklehrer die Haare gerauft.
Vgl. "Die Voltzahl ist 55" ggü. "Die Spannung ist 55 Volt"Schlechter Vergleich zwischen Deutsch und C++. Oder redest du so, wie du Quelltext schreibst?
-
berniebutt schrieb:
Maximal heute (fast) beliebig.
Mehr als eine Bildschirmgrösse (nach ISO/ANSI 80 Zeichen breit) sollte es dann doch nicht sein.
-
Wer Mist redet, der programmiert auch Mist. :xmas2:
-
Und die andere Richtung?
-
Bashar schrieb:
In einem Programm, in dem eine Temperatur vorkommt, kommen auch noch andere Temperaturen vor. Die Frage ist also überhaupt nicht, ob man die Einheit oder was auch immer in den Namen eincodiert, sondern wie man die verschiedenen Bedeutungen auseinanderhält: Temperatur, bei der die Heizung oder Kühlung ein- oder ausgeschaltet werden soll, gemessene Temperatur, geschätzte Temperatur, gewünschte Temperatur tagsüber/abends/nachts, tatsächliche/erwartete Außentemperatur, Temperatur des Leitungswassers/Kühlwassers, Abgastemperatur usw. Ich hab noch keine Temperaturregelung oder sowas programmiert. Aber ich wette, dass die in der Praxis nicht alle das Wort "Temperatur" im Variablennamen haben, und die Einheit schon gar nicht.
Okay, nehmen wir mal an, wie schreiben ne Software für ne Haussteuerung, bei der einfach alles gesteuert wird.
Also der Status der Rollläden 1-25 in Prozent, also wie weit sie geschlossen sind.
Dann die Luftfeuchtigkeit in den verschiedenen Räumen, die ganze Steuerung zu der Beleuchtung, wobei man hier auch berücksichtigen muß, das nicht alle Lichter nur ein und aus kennen, sondern es auch Lampen gibt, die man schwächer runterregeln kann, hier ist also wieder ein Status in Prozent notwendig.
Oder man hat überall Lichtsensoren die in Candela messen.
usw.Auf jedenfall reicht es dann nicht mehr, die Variable wie du sagst, einfach Messwert_von_Esszimmer zu nennen, denn dann muß man schon schreiben Temperaturmesswert_von_Esszimmer oder so ähnlich.
-
Namenslänge schrieb:
Auf jedenfall reicht es dann nicht mehr, die Variable wie du sagst, einfach Messwert_von_Esszimmer zu nennen
Das hab ich doch gar nicht gesagt.