Usare 0 e length-1 è una cattiva pratica per iterare attraverso un array?

0

È molto, molto comune vedere un codice come questo:

for (int i = 0; i < array.Length; i++)
{
    DoSomething(array[i]);
}

Il codice sopra fa alcune ipotesi sugli array (che a quanto pare rimangono validi per la maggior parte del tempo, ma non sempre ). Non sarebbe più esplicito e più avanti compatibile usare qualcosa del genere, invece?

for (int i = array.GetLowerBound(0); i <= array.GetUpperBound(0); i++)
{
    DoSomething(array[i]);
}

Perché il formato precedente è così largamente accettato e usato?

(So che potremmo usare foreach , ma supponiamo che ci sia un motivo che non funzionerebbe per noi in questo caso specifico).

    
posta John Wu 11.01.2017 - 01:06
fonte

1 risposta

1

L'alternativa suggerita presuppone che l'array sia unidimensionale. Quindi, immagino che non puoi vincerli tutti ...;)

Le matrici sono un tipo di dati relativamente primitivo. Mi sento libero di utilizzarli internamente per l'implementazione di un'astrazione, proprio come userò int e string s. In questi casi, il creatore dell'array e il consumatore / utente dell'array è uno e la stessa classe, quindi le ipotesi dell'indice a base zero sono naturali, facili da verificare e relativamente facili da modificare se ci fosse qualche ragione.

Mi sentirei meno libero usando un array come parte di un'astrazione per un client (anche se solo io più tardi) da usare, proprio come mi sento più a disagio nel fare un'astrazione in termini di% primitivo int o string . Nel caso di creare un'astrazione, preferirei distribuire (o consumare) un tipo dedicato che rappresenta una raccolta o un iteratore / generatore. Questo per proteggere sia me che i client dai dettagli specifici della lingua di array (ints / stringhe), per creare più sicurezza del tipo introducendo tipi ben definiti e per provare a spostare l'astrazione verso il dominio del client e lontano dal dominio di implementazione .

    
risposta data 11.01.2017 - 01:41
fonte

Leggi altre domande sui tag