Ciclo esplicito o implicito?

1

Perché o quando è preferito "esplicito" quando le soluzioni implicite sono spesso più leggibili e meno codice? Dice "esplicito è meglio di implicito" quando per esempio un ciclo implicito è meglio di un ciclo esplicito, non è vero?

for every in all:
  every.updated = True

Quanto sopra sembra implicito per me e migliore di un contatore esplicito poiché un contatore è un'altra cosa che può andare storta e perché non lasciare il compilatore o un altro ambiente invece di richiedere una variabile contatore esplicita:

  for(int i=0, i<a.length, i++)
...

E ci sono lingue in cui tutto il ciclo è "implicito" - cosa significa e quando è preferito? E non impostare esplicitamente un valore su null o None o allo stesso modo mi sembra migliore e voglio riscrivere il codice quando "risolvo" un requisito impostando esplicitamente return null o String name = null poiché penso che sia esplicito su cosa dovrebbe essere nullo e None dovrebbe avere una soluzione più chiara come usare una variabile solo se è necessario e se scrivo return nullo da qualche parte probabilmente sto sbagliando. Quando stavo scrivendo Java mi sono trovato a scrivere return null e dichiarare valori come nulli in alcuni punti e non mi piaceva e potevo riscriverlo anche se il caso in cui ho inserito return null è stato raggiunto solo in caso di errore.

Ho chiesto al guru al lavoro se dovremmo mai dichiarare una variabile su null, non è meglio usare le impostazioni predefinite?

Sarei felice di sapere cosa ne pensi. Un esempio in cui è migliore per essere esplicito mi viene in mente di dichiarare un elenco e dichiarare esplicitamente quale tipo è nell'elenco è meglio di un semplice elenco di oggetti, ad es. è preferibile dichiarare ArrayList<ArrayList> invece di una semplice ArrayList se sappiamo che si tratta di un elenco di elenchi.

    
posta Niklas Rosencrantz 11.09.2011 - 21:56
fonte

2 risposte

1

In Java, il ciclo perfezionato per ogni sintassi ha un impatto sulle prestazioni. Generalmente restituire un valore nullo è una cattiva pratica al meglio. In genere si desidera restituire un oggetto creato utilizzando il costruttore predefinito. Ciò impedisce le eccezioni del tempo di esecuzione che coinvolgono riferimenti null. Ci sono casi in cui potresti voler restituire nulla, ad esempio quando provi a creare un file.

    
risposta data 11.09.2011 - 22:03
fonte
5

Penso che il loop "implicito" qui non sia molto implicito. Confronta questo con Scala, in cui hai operazioni su elenchi senza alcun accenno al loop:

List(1,2,3,4).foreach(println)

List(1,2,3,4).map(x => x*x)

List(1,2,3,4).filter(_ % 3 != 0)

Tuttavia, i cicli enhanced for (o "per ogni" ... in Python) sono migliori di quelli espliciti, è un passo nella giusta direzione, l'astrazione dai dettagli di basso livello. Per esempio. per la maggior parte delle operazioni non è nemmeno importante avere una struttura di dati lineare, è possibile implementare facilmente i tre metodi sopra indicati per altre strutture di dati come gli alberi, e non si noterebbe nemmeno la differenza.

    
risposta data 15.09.2011 - 10:51
fonte

Leggi altre domande sui tag