Nomi funzione brevi per funzione o concetto generale usati spesso [duplicato]

2

Sono un po 'in un dilemma: supponiamo di avere una funzione molto generale e a specializzazione di esso per ragioni di praticità. Supponiamo anche che il la funzione specializzata viene utilizzata il 90% delle volte, quindi "comune" caso".

Devo usare un nome di funzione più breve per il caso generale (ad esempio do ) e un tempo più lungo uno per lo speciale ( do_something_special ) o viceversa (ad es. do_something_general e do )? Quando si applicano le parole di Larry Wall (rendi semplici cose facili e difficili possibili), userei un modulo più breve per il più spesso caso usato.

EDIT: giusto per rendere questo un po 'più chiaro: in questo esempio, do è solo un segnaposto per un nome breve e descrittivo. Naturalmente potrebbe essere più lungo, ad es. run_task o process_file . Quello che voglio sapere è che se ho una funzione chiamata run_task_in_specific_way che viene usata la maggior parte del tempo dovrebbe in realtà essere chiamata run_task (sebbene sia più specifica) o l'astrazione generale.

EDIT 2: Per chiarire ancora una volta: le funzioni di cui sto parlando non forniscono più di una funzionalità né dovrebbero essere sostituite da un progetto basato sulla classe. Il motivo è: sono astratti nello stesso senso di qsort , ad es. assumibile dagli utenti per compiere un'azione specifica. Incastrarli in una classe ausiliaria non ha molto senso.

    
posta matthias 02.10.2013 - 08:50
fonte

5 risposte

1

Diamo un'occhiata alla Stringa classe di Java . p>

Ha un metodo length() , che restituisce la lunghezza di una stringa. Spesso è necessario verificare se una stringa è vuota (ad esempio per verificare se l'utente ha inserito un nome utente in un modulo Web). Così fai:

if(username.length() == 0) {
    // Stupid users!
}

Per comodità, String ha il metodo isEmpty() da Java 1.6. Ora, devi solo fare:

if(username.isEmpty()) {
    // Do stuff
}

Tuttavia, la documentazione chiaramente afferma cosa isEmtpy() fa:

Returns true if, and only if, length() is 0.

Non c'è niente di sbagliato in questo:

  • Mantieni la funzione generale (ovviamente)
  • Assegna alla funzione specializzata un nome significativo. specialLength() non darebbe alcun suggerimento su ciò che fa.
  • Nella documentazione, chiarisci che la tua funzione specializzata è solo una "scorciatoia" per una funzione esistente e descriverla.
risposta data 02.10.2013 - 12:50
fonte
3

Usa un nome che descriva accuratamente cosa sta ottenendo la funzione. Se fa qualcosa di "speciale", metti "speciale" nel nome. Non preoccuparti della durata del nome (entro limiti ragionevoli). Nel corso dei prossimi decenni, i lettori che decifrano i nomi delle funzioni criptate impiegheranno molto più tempo a capire cosa intendono dire piuttosto che digitare il nome alcune volte.

Nell'esempio sopra, userei "do_general" e "do_special" ..... "do" non dà la minima idea che c'è un sostituto.

    
risposta data 02.10.2013 - 08:59
fonte
1

Non usi le lezioni? O è una funzione globale? In generale potresti usare quelli brevi come:

<?PHP
class Text {
  public function show() {
  }
  public function hide() {
  }
  public function delete() {
  }
}
class Image {
  public function show() {
  }
  public function delete() {
  }
}

//Implementation, even if we mix them up it stays quite clear and readable:
$firstText=new Text();
$firstText->show();
$imageOfMyFriend=new Image();
$firstText->delete();
$imageOfMyFriend->show();
?>

Il nome dell'istanza della classe definirà di cosa stiamo parlando. Questo potrebbe anche essere fatto con più classi di utilità che chiamate statiche:

<?PHP
  class File {
    public static function read($path) {
    }
    public static function readStream($path) {
    }
  }


  //implementation
  echo File::read('/home/myfile');
  echo File::readStream('/pathToMyStream');
?>

Tutti i nomi molto semplici ma sembrano ancora funzionare per me.

Quando hai delle eccezioni puoi definirle in più modi. Se hai davvero bisogno di un metodo pubblico separato puoi sempre derivare le alternative (come vedi in File :: readStream). Anche questo è chiaro.

Generalmente ridurrei le uscite pubbliche, quindi fai in modo che la funzione di lettura rilevi se stiamo gestendo un flusso, per esempio. È la stessa idea, leggi, quindi è la stessa cosa che cerchi di ottenere. Ciò rende possibile il passaggio delle implementazioni in seguito.

    
risposta data 02.10.2013 - 12:15
fonte
0

In base alla mia esperienza, sceglierei la via di mezzo. È meglio avere l'espressione più corta invece di avere un codice breve o una frase come nome. In generale, penso che non dovresti sacrificare l'essere espressivo per essere breve quando si tratta di nominare.

Erano i miei due centesimi!

P.S. Sulla base di ciò che hai appena detto a mattnz, ti suggerisco di sviluppare un modello per nominare e nominare ogni cosa seguendo le sue linee guida, non importa se breve o un po 'più lungo.

    
risposta data 02.10.2013 - 09:33
fonte
0

Personalmente non mi è mai piaciuto "fare" molto codice. Non è molto descrittivo se non implicando che qualcosa deve essere eseguito, ma a meno che non sia un getter o setter, è già implicito che stai eseguendo qualcosa.

Quando voglio scrivere un codice relativo a un metodo generale simile a un controller, tendo a chiamarlo "execute". Come si comporta il mio controller è determinato da un set di configurazione prima di chiamare execute. Se c'è un modo di lavorare radicalmente diverso, che è un caso particolare, rinominerò execute in executeDefault e poi creerò un execute. Per farla breve, creerò semplicemente un metodo "esegui" in quel punto che chiama executeDefault. In questo modo, ho il meglio di entrambi i mondi: nome breve e codice comprensibile.

Se finisco per avere molti casi di esecuzione simili, allora considero la ristrutturazione utilizzando il modello Abstract Factory che mi fornisce classi di controller con metodo "execute".

Spero che ti aiuti.

    
risposta data 02.10.2013 - 10:07
fonte

Leggi altre domande sui tag