Qualsiasi standard per nominare le variabili nei cicli for (invece di i, j, k) [duplicato]

5

Stavo solo scrivendo un ciclo annidato e sono arrivato al punto in cui stavo usando l e m come variabili per controllare i loop, e ho capito che questo poteva diventare molto confuso; Ho già avuto alcuni bug quando ho copiato blocchi di codice a diversi livelli. Quindi stavo pensando invece di usare i, j, k, avrei usato iSomething, iSomethingelse. Quindi, se dovessi andare su un modello 3D, utilizzare Id

for(int iMesh=0;iMesh<numMesh;iMesh++)
    for(int iVertex=0;iVertex<meshes[iMesh].numVertex;iVertex++)

o forse usa il nome della variabile Im iterating over:

for (int iMeshes

for (int iVerts

Quindi mi stavo chiedendo se ci sono altre pratiche standard o comunemente usate per fare questo?

EDIT: Mi chiedo se ci sono degli standard, non se è OK per farlo

    
posta zacaj 01.01.2012 - 22:14
fonte

7 risposte

15

i, j e k sono le variabili contatore standard. Usandoli, le variabili vengono utilizzate per mantenere il conteggio dei cicli e nient'altro . Se usi un altro nome più complesso, è meno chiaro a cosa serve la variabile.

Se le tue variabili contatore diventano confuse, allora è un segno che il tuo codice ha bisogno di rompere. cioè

for(int i=0;i<numMesh;i++)
   foo += CountVerticies(meshes[i]);
    
risposta data 02.01.2012 - 00:24
fonte
5

per i loop standard le persone scelgono i, j, k perché è facile e in molte situazioni non hai un significato per questo, quindi j, k è significativo anche a tutti gli sviluppatori, quindi è abbastanza vicino a uno standard.

comunque se hai bisogno di passare a qualcosa di più significativo, usa le seguenti linee guida che ho scelto dal libro di zio bob " Pulisci codice " nota che ci sono altre cose da considerare dal libro, ma questo è quello che pensavo fosse adatto al nome del ciclo: -

  1. Utilizza i nomi che rivelano l'intenzione
  2. Evita la disinformazione
  3. Crea distinzioni significative
  4. Utilizza nomi pronuncianti
  5. Utilizza nomi ricercabili
  6. Evita codifiche (notazione ungherese, prefissi membri)
  7. Non essere carino
  8. Scegli una parola per concetto

quindi il codice finirà qualcosa di simile più o meno

        for(int cellPointer = 0; cellPointer < 10;cellPointer++)
        {
            for (int rowPointer = 0; rowPointer < 10; rowPointer++)
            {
               //do something
            }
        }

quindi, quando torni indietro, puoi capirlo, se qualcuno da fuori riuscisse a lavorarci dopo che saresti leggibile da lui

    
risposta data 02.01.2012 - 00:58
fonte
2

Usa i, j, k ... se i tuoi indici non hanno "significato".

Userei mesh, vertice, ecc. senza prefisso i, invece, l'ungherese non necessario è il male.

Potresti anche usare cose come i0, i1, ..., se hai un gran numero di cicli annidati, ma penso che più di 3-4 sia insolito.

    
risposta data 01.01.2012 - 23:47
fonte
2

x, y e z possono essere utili, specialmente quando si tratta di coordinate 2D o 3D.

Certi battiti che cercano di ricordare che i = xej = y, ecc.

    
risposta data 02.01.2012 - 01:27
fonte
1

i è un linguaggio standard in matematica per rappresentare qualsiasi numero intero in una serie:

1, 2, 3 ... i, i + 1, i + 2 ... n.

Il i sta per Integer (secondo uno dei miei ex professori, non ho altri citi.) Quindi, in qualsiasi momento dell'esecuzione del ciclo, sarebbe accurato da una prospettiva matematica chiamarlo i .

    
risposta data 02.01.2012 - 02:58
fonte
0

Uno dei problemi con l'utilizzo di variabili contatore è che al di fuori della logica di controllo per l'iterazione non hanno alcun significato.

Il tuo istinto è corretto sul fatto che l'utilizzo di iVertex sia migliore rispetto all'utilizzo di i, poiché ciò aggiunge chiarezza. Tuttavia, il prefisso "i" ti dice che la variabile è un numero intero, il che, sebbene utile in alcune circostanze, non è così utile con gli IDE moderni (questa è una delle ragioni per cui diverse risposte argomentano).

Ciò che è meglio è solo il consiglio generale per nominare una variabile, che si basa su ciò che la variabile contiene. In questo caso, stai pensando alla variabile in base a come viene modificata, ma non a come viene utilizzata o a cosa rappresenta. Un contatore di cicli viene incrementato da un certo punto di inizio fino a un certo punto, ma uno può dirlo osservando la struttura di controllo. Un'opzione migliore è nominarla in base a come viene consumata dal corpo del ciclo. In questo caso, iMesh viene utilizzato come indice nell'array meshes, quindi utilizzerei qualcosa come "meshId".

Un buon motivo per nominare in base a come si intende utilizzare qualcosa è che si possano rilevare più facilmente i difetti del codice. Per esempio, se vedo "a = MeshId + 2" sarò molto sospettoso, perché generalmente non vogliamo eseguire operazioni aritmetiche su un ID, solo operazioni su indici (mesh [MeshId]).

Esistono standard di codifica, ma il problema è che ce ne sono troppi. Per ulteriori letture, puoi provare qui:

link )

    
risposta data 02.01.2012 - 02:15
fonte
-2

Scegli un nome che descrive a cosa serve la variabile, come

for (int loopCounter; loopCounter < 10; loopcounter++)
{
     if( loopCounter == doSomethingVal)
     {
          //do somthing

Questo è l'approccio che utilizzo in modo da poter leggere la logica del codice senza dover tradurre il codice in "inglese" che rende più facile per una nuova persona leggere il codice e comprendere l'intento del codice ( come il codice legge la logica come sarebbe parlata tra le persone). Un sacco di persone non lo gradiranno in questo modo (con il downvoting!) Perché non amano il codice verboso, o sono semplicemente troppo a proprio agio con i, j, k, o stanno utilizzando un linguaggio / hardware con memoria limitata. Il problema con l'utilizzo di qualcosa di corto come solo io è che se si sta eseguendo il debug o si legge una grande sezione di codice e si arriva a qualcosa del tipo:

   ......
   someVar = i;

allora hai bisogno di cercare cosa sono, cosa è qualche Var e cosa significa questa linea in termini di ciò che il programma sta tentando di modellare. Ma se hai qualcosa del tipo:

  ......
  currentItemId = loopItemCounter;

allora è più ovvio quale sia l'intento del comando senza commenti o la necessità di leggere una grande porzione di codice. Per funzioni / metodi brevi non fa molta differenza (perché probabilmente puoi vedere tutto il codice su una pagina), ma se hai mai provato a eseguire il debug di un grande programma con nomi variabili che sono solo io o kk vedrai perché preferisco essere più veboso nel nominare.

Penso di aver acquisito questa pratica dopo aver letto il codice del libro completo, o uno degli altri libri dei programmi di programmazione.

    
risposta data 01.01.2012 - 23:06
fonte

Leggi altre domande sui tag