Frage

Was variable Namenskonventionen gehen, sollte Iteratoren i oder etwas mehr semantische wie count genannt werden? Wenn Sie i nicht, warum nicht? Wenn Sie das Gefühl, dass i akzeptabel ist, gibt es Fälle von Iteration, wo es sollte nicht verwendet werden?

War es hilfreich?

Lösung

Abhängig vom Kontext nehme ich an. Wenn Sie in dem Looping in einigen durch eine Reihe von Gegenständen Sammlung dann sollte es ziemlich offensichtlich aus dem Kontext, was Sie tun.

for(int i = 0; i < 10; i++)
{
    // i is well known here to be the index
    objectCollection[i].SomeProperty = someValue;
}

Allerdings, wenn es nicht sofort aus dem Zusammenhang klar ist, was Sie tun, oder wenn Sie Änderungen an der Index machen, sollten Sie einen Variablennamen verwenden, die mehr indikativ für die Nutzung ist.

for(int currentRow = 0; currentRow < numRows; currentRow++)
{
    for(int currentCol = 0; currentCol < numCols; currentCol++)
    {
        someTable[currentRow][currentCol] = someValue;
    }
} 

Andere Tipps

"i" bedeutet "Schleifenzähler" zu einem Programmierer. Es ist nichts falsch mit ihm.

Hier ist ein weiteres Beispiel für etwas, das vollkommen in Ordnung ist:

foreach (Product p in ProductList)
{
    // Do something with p
}

Ich neige dazu, i, j, k für sehr lokalisierte Schleifen zu verwenden (nur für einen kurzen Zeitraum in Bezug auf die Anzahl von Versorgungsleitungen vorhanden sind). Für Variablen, die über eine größere Quellbereich existieren, neige ich dazu, ausführlichere Namen zu verwenden, so kann ich sehen, was sie sind, denn ohne den Code der Suche zurück.

übrigens, ich denke, dass die Namenskonvention für diesen aus der frühen Fortran Sprache kam, wo ich der erste Integer-Variable war (A - H Schwimmer waren)

?

i akzeptabel ist, für bestimmte. Allerdings erfuhr ich eine enorme Menge ein Semester aus einem C ++ Lehrer, den ich hatte, der Code verweigert, die nicht einen beschreibenden Namen für jede einzelne Variable hatte. Der einfache Akt der Namensgebung alles hat mich gezwungen, deskriptiv über meinen Code schwerer zu denken, und ich schrieb bessere Programme nach diesem natürlich nicht von C ++ zu lernen, sondern vom Lernen alles zu nennen. Code Complete hat einige gute Worte zu diesem demselben Thema.

i ist in Ordnung, aber so etwas wie das ist nicht:

for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        string s = datarow[i][j].ToString(); // or worse
    }
}

Sehr häufig für Programmierer versehentlich den i zu tauschen und die j in dem Code, vor allem, wenn sie schlechte Augen oder ihr Windows-Design haben, ist „Hotdog“. Dies ist immer ein „Codegeruch“ für mich -. Es ist eine Art selten ist, wenn diese nach oben geht nicht geschraubt

i ist so verbreitet, dass es akzeptabel ist, auch für Leute, die beschreibenden Variablennamen lieben.

Was absolut nicht akzeptabel ist (und eine Sünde in meinem Buch) wird mit i, j, k oder in jedem anderen Kontext als als Integer-Index in einer Schleife .... z.

foreach(Input i in inputs)
{
    Process(i);

}

i ist auf jeden Fall akzeptabel. Nicht sicher, welche Art von Rechtfertigung ich machen müssen -. Aber ich verwende es die ganze Zeit, und andere sehr angesehene Programmierer auch tun

Soziale Validierung, ich denke:)

Ja, in der Tat bevorzugt es, da jeder Programmierer den Code liest, wird verstehen, dass es einfach ein Iterator.

Was ist der Wert von i statt einer spezifischeren Variablennamen? So speichern Sie 1 Sekunde oder 10 Sekunden oder vielleicht, vielleicht, sogar 30 Sekunden Denken und Typisierung?

Was kostet i zu verwenden? Vielleicht nichts. Vielleicht ist der Code so einfach, dass ich verwendet, ist in Ordnung. Aber vielleicht, vielleicht, werde ich mit Entwicklern zwingen, die in Zukunft auf diesen Code kommen zu lassen für einen Moment zu denken, „was tut meine ich hier?“ Sie werden denken: „es ist ein Index, ein Graf, ein Offset, ein Flag“ Sie werden denken: „Diese Änderung ist sicher, ist es richtig, werde ich von 1 ausgeschaltet sein“

Mit i spare Zeit und geistige Anstrengung beim Schreiben von Code, sondern um den Code zu Missverständnissen aufgrund der unbeabsichtigten Einführung von Defekten in der Zukunft mehr geistige Anstrengung kosten, oder vielleicht sogar zur Folge haben kann am Ende.

Im Allgemeinen sind die meisten Software-Entwicklung ist die Wartung und Erweiterung, so dass die Menge Zeit damit verbracht, den Code liest, wird in beträchtlichem Ausmaß die Menge an Zeit überschreiten verbrachte sie zu schreiben.

Es ist sehr einfach, die Gewohnheit, mit aussagekräftigen Namen überall zu entwickeln, und wenn man einmal diese Gewohnheit hat dauert es nur wenige Sekunden mehr Code mit aussagekräftigen Namen zu schreiben, aber dann haben Sie Code, der leichter zu lesen ist, einfacher zu verstehen und mehr offensichtlich richtig.

Ich verwende ich für kurze Schleifen.

Der Grund ist es in Ordnung ist, ist, dass ich es völlig unglaubwürdig finden, dass jemand eine Erklärung von Iteratortyp, mit initializer sehen konnte, und dann später drei Linien behaupten, dass es nicht klar, was die Variable darstellt. Sie sind nur so zu tun, weil sie sich entschieden haben, dass „sinnvolle Variablennamen“ bedeuten muss „lange Variablennamen“.

Der Grund, warum ich es wirklich tun, ist, dass ich feststellen, dass bei der Hand etwas in keinem Zusammenhang mit der spezifischen Aufgabe verwendet wird, und dass ich immer nur in einem kleinen Umfang nutzen würde, spart mir Sorgen, dass ich einen Namen verwenden könnte, die irreführend ist, oder mehrdeutig, oder für etwas anderes in den größeren Umfang eines Tages nützlich sein. Der Grund, es ist „i“ und nicht als „q“ oder „count“ ist nur Konvention von Mathematik geborgt.

Ich verwende ich nicht, wenn:

  • Der Schleifenkörper ist nicht klein, oder
  • der Iterator tut etwas anderes als vorher (oder Rückzug) vom Beginn eines Bereichs bis zum Ende der Schleife:

ich muß nicht unbedingt in Schritten von 1 gehen, solange der Zuwachs konsistent und klar, und natürlich könnte vor dem Ende des iterand stoppen, aber wenn es jemals die Richtung ändert, oder unmodifiziert durch eine Iteration der Schleife (einschließlich der teuflischen Verwendung von iterator.insertAfter () in einer vorwärts-Schleife), versuche ich, etwas anderes zu verwenden, sich zu erinnern. Dies signalisiert, „dies ist nicht nur eine triviale Schleifenvariable ist, damit dies keine triviale Schleife sein kann“.

Wenn die „etwas mehr semantische“ ist „Iterator“ dann gibt es keinen Grund, warum ich nicht zu verwenden; es ist ein gut verstanden Idiom.

Ich glaube, ich in for-Schleife Situationen völlig akzeptabel ist. Ich habe immer das sein ziemlich Standard und nie wirklich laufen in Auslegungsfragen gefunden, wenn ich in diesem Fall verwendet wird. foreach-Schleifen bekommen ein wenig komplizierter, und ich glaube wirklich, auf Ihre Situation abhängt. i, wenn nur selten in foreach verwende ich nur in for-Schleifen, wie ich finde ich auch in diesen Fällen un-beschreibend zu sein. für foreach ich versuche, eine Abkürzung für den Objekttyp verwenden geschleift werden. z:

foreach(DataRow dr in datatable.Rows)
{
    //do stuff to/with datarow dr here
}

Wie auch immer, nur mein $ 0,02.

Es hilft, wenn man ihm etwas nennen, was es beschreibt durch geloopt. Aber ich in der Regel nur ich verwenden.

Solange Sie entweder i sind mit Schleifen zu zählen, oder einen Teil eines Index, der von 0 (oder 1 in Abhängigkeit von PL) bis n geht, dann würde ich sagen, dass ich in Ordnung ist.

Ansonsten ist es wahrscheinlich einfach zu Namen ich etwas sinnvoll es seine mehr als nur einen Index.

Ich möchte darauf hinweisen, dass i und j sind auch mathematische Schreibweise für Matrix-Indizes. Und in der Regel, Sie Schleifen über ein Array. So macht es Sinn.

Solange Sie es vorübergehend in einer einfachen Schleife verwenden und es ist offensichtlich, was Sie tun, sicher. Das heißt, es gibt keine andere kurze Wort, das Sie stattdessen verwenden können?

i als Schlaufe Iterator weithin bekannt, so dass Sie eigentlich eher Wartung Programmierer verwirren, wenn Sie es außerhalb einer Schleife verwenden, aber wenn Sie etwas mehr beschreibend (wie filecounter) verwenden, macht es Code schöner.

Es hängt davon ab. Wenn Sie über einen bestimmten Satz von Daten iteriert dann denke ich, macht es mehr Sinn einen beschreibenden Namen zu verwenden. (ZB. filecounter als Dan vorgeschlagen).

Wenn Sie jedoch eine beliebige Schleife gerade ausführen, dann ist i akzeptabel. Als ein Arbeitskollege es mir beschrieben - „Diese Variablen werden nur von dem i Schleifenkonstrukt geändert Wenn das nicht wahr ist, verwendet for nicht“ i ist eine Konvention, die bedeutet,

Die Verwendung von i, j, k für die Zähler INTEGER Schleife geht an den frühen Tagen des Fortran zurück.
Persönlich habe ich kein Problem mit ihnen, solange sie sind INTEGER zählt.
Aber dann wuchs ich auf Fortran-up!

mein Gefühl ist, dass die Konzept von einem einzelnen Buchstaben verwendet, ist gut für „einfachen“ Schleifen, aber ich vor zwei Buchstaben eine lange Zeit verwenden gelernt und es hat super geklappt.

Ich fragte einen ähnliche Frage letzte Woche und die folgende ist ein Teil von meine eigene Antwort :

// recommended style              ●    // "typical" single-letter style
                                  ●
for (ii=0; ii<10; ++ii) {         ●    for (i=0; i<10; ++i) {
    for (jj=0; jj<10; ++jj) {     ●        for (j=0; j<10; ++j) {
        mm[ii][jj] = ii * jj;     ●             m[i][j] = i * j;
    }                             ●        }
}                                 ●    }
für den Fall, ist der Nutzen nicht sofort offensichtlich: für jeden einzelnen Buchstaben durch den Code der Suche werden viele Dinge, die nicht , was Sie suchen. der Brief i in Code recht häufig auftritt, wo es nicht die Variable, die Sie suchen.

Ich habe seit mindestens 10 Jahren ist es auf diese Weise zu tun.

beachten Sie, dass viele Leute, die entweder kommentierte / beide der oben genannten sind „hässlich“ ...

Ich werde gegen den Strich gehen und sagen, nein.

Für die Masse, die sagt: „Ich als Iterator verstanden wird“, die wahr sein können, aber für mich ist das Äquivalent von Kommentaren wie ‚Weisen Sie den Wert 5 bis Variable Y. Variablennamen wie Kommentar sollte die erklären, warum / was nicht, wie.

Um ein Beispiel aus einer früheren Antwort zu verwenden:

for(int i = 0; i < 10; i++)
{
    // i is well known here to be the index
    objectCollection[i].SomeProperty = someValue;
}

Ist es, dass es sehr viel schwieriger, nur einen aussagekräftigen Namen wie so verwenden?

for(int objectCollectionIndex = 0; objectCollectionIndex  < 10; objectCollectionIndex ++)
{
    objectCollection[objectCollectionIndex].SomeProperty = someValue;
}

Zugegeben ist der (entlehnt) Variablenname Object auch ziemlich schlecht benannt.

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