L'uso di variabili di una sola lettera è incoraggiato? [chiuso]

11

L'uso delle variabili a una lettera è incoraggiato in Java? Nei frammenti di codice o nelle esercitazioni, le vedi spesso. Non riesco a immaginare che utilizzarli sia incoraggiato perché rende il codice relativamente più difficile da leggere e non li vedo mai essere utilizzati in altri linguaggi di programmazione!

    
posta William Edwards 29.05.2015 - 16:05
fonte

4 risposte

32

La corretta denominazione delle cose è difficile. Molto difficile. Se lo guardi dall'altra parte, puoi anche prendere questo per significare che le cose nominate correttamente sono importanti. (Altrimenti, perché avresti speso lo sforzo per nominarlo?)

Ma, a volte, i nomi delle cose solo non sono importanti. Questo è il motivo per cui abbiamo cose come le funzioni anonime ("lambda"), ad esempio: perché a volte non vale la pena nominarle.

Ci sono molti esempi, dove i nomi di variabili a lettera singola (o molto breve) sono appropriati:

  • i , j , k , l per gli indici di loop
  • k e v per la chiave e il valore in una mappa
  • n per un numero (ad es. in Math.abs(n) )
  • a , b , c per oggetti arbitrari (ad es. in max(a, b) )
  • e per l'elemento in un generico ciclo for each
  • f per la funzione in una funzione di ordine superiore
  • p per la funzione predicato in un filtro
  • T , T1 , T2 , ... per le variabili di tipo
  • E per le variabili di tipo che rappresentano il tipo di elemento di una raccolta
  • R per una variabile di tipo che rappresenta il tipo di risultato di una funzione
  • ex per l'eccezione in una clausola catch
  • op per l'operazione in una mappa o piega
  • aggiungendo la lettera s per indicare il plurale, ovvero una raccolta (ad esempio ns per un insieme di numeri, xs e ys per due raccolte arbitrarie di oggetti generici)

I never see them being used in other programming languages!

Sono molto comuni in quasi tutte le lingue che conosco (e probabilmente anche in quelle che non conosco.) Haskell, F #, ML, Ruby, Python, Perl, PHP, C #, Java, Scala, Groovy, Boo , Nemerle, D, Go, C ++, C, lo chiami.

    
risposta data 29.05.2015 - 16:39
fonte
20

Se il tuo ciclo non fa altro che usare una variabile per il conteggio

  for(int i = 0; i < 10; i++) {
     System.out.println("Stop it! I really mean it!!");
  }

allora sì, questo è il miglior nome che potresti usare. Qualcosa di più lungo non può rendere la semantica più ovvia, ma richiede molto più tempo per leggere.

Se la variabile è usata all'interno del ciclo, può essere utile un nome significativo.

for(int door = 0; door < 3; door++) {
  int reward = gauge(door);
  if(reward > max) {
    max = reward;
    best = door;
  }
}

Se la tua variabile è usata a livello di metodo, il suo nome dovrebbe essere più lungo; se è usato in tutta la classe, il suo nome dovrebbe essere del tutto autoesplicativo, altrimenti quasi certamente ridurrà la chiarezza del tuo codice.

In breve, maggiore è lo scope della variabile, più lungo deve essere il suo nome.

    
risposta data 29.05.2015 - 16:11
fonte
4

Leggendo il codice nella risposta di Kilian, non penso "c'è un ciclo, e c'è una variabile, e ha tipo int, e ha un nome, e il nome è i, ed è inizializzato per 0, ... ". Penso solo a "loop ..." dove i tre punti rappresentano dettagli insignificanti a cui non penso nemmeno. Nella mia mente del programmatore, quella variabile non esiste realmente, è solo un artefatto che devo digitare, come il for (;;) {} che lo rende un loop.

Dato che quella variabile non esiste nemmeno nella mia mente, perché dovrei dargli un nome, oltre a ciò che è assolutamente necessario?

    
risposta data 29.05.2015 - 16:34
fonte
-1

Se ti riferisci alle lettere i, j, k come indici all'interno di un ciclo, è una pratica comune in Java e in altri linguaggi di programmazione. Anche se probabilmente è meglio usarne uno per ogni loop di stile, come

for(User user: users) {
  doSomethingWithTheUser(user);
}

invece di

for(int i=0; i<users.size(); i++) {
  doSomethingWithTheUser(users.get(i));
}

In Java, lo stile del ciclo è stato introdotto abbastanza di recente. Questo potrebbe essere il motivo per cui lo stai notando di più per Java, poiché il looping degli indici era il modo più comune di eseguire il loop su un array o un elenco.

Ci sono alcuni altri casi in cui singole lettere possono essere appropriate, come quando si implementa una funzione matematica in cui singole lettere come n, x o y, potrebbero già essere comuni. Ma in generale, no, dai un nome alle tue variabili qualcosa di significativo.

    
risposta data 29.05.2015 - 19:35
fonte

Leggi altre domande sui tag