Come parlare di metodi anonimi / lambda

5

Ho capito l'altro giorno che non so come parlare dei metodi anonimi. È abbastanza facile parlare dei metodi denominati ( The X method takes a Y1, Y2 and Y3 ) e delle classi ( The X class has A, B and C methods ), ma è più difficile con i metodi anonimi.

Come si fa a parlare (e scrivere) di loro ? Dal numero di parametri che prendono, al tipo di quei parametri alla firma del metodo?

Per questa firma di metodo anonimo, come leggeresti ad alta voce?

int -> int -> bool -> double

Direi "int, int, bool to double" . Che ne dici di chiamarlo? Come leggeresti questo?

(A ,B) => A*B;

Direi "A B goes/is to A times B" .

    
posta Andy Hunt 26.04.2012 - 16:07
fonte

5 risposte

14

Se

The X method takes P1, P2, P3 and returns R

è abbastanza buono, perché è

An anonymous method that takes P1, P2, P3 and returns R

insufficiente?

Secondo la mia esperienza, il modo migliore per parlare dei metodi anonimi è lo stesso del modo in cui parleresti dei metodi denominati.

Per

(A, B) => A*B;

Lo leggerei come "un metodo anonimo che moltiplica due numeri" (o qualsiasi cosa A * B significhi nel contesto).

    
risposta data 26.04.2012 - 16:13
fonte
5

I metodi anonimi sono sempre dichiarati in un contesto, quindi uso quel contesto per nominarlo: il gestore pronto per il documento, il gestore dei clic del collegamento, il lambda restituito da functionX, ecc.

Se aggiungi degli argomenti nel mix, è qualcosa come "Crea un lambda che moltiplica i suoi due argomenti". Descrivi cosa fa, come faresti quando fai un nome esplicito per questo. Le descrizioni più formali devono essere pronunciate raramente.

    
risposta data 26.04.2012 - 16:30
fonte
1

Lambas assiste la capacità di C # di supportare la programmazione funzionale. Nella programmazione funzionale dichiariamo ciò che faremo senza definire come lo faremo. La concentrazione non è sull'algoritmo o sull'implementazione, piuttosto sull'azione da eseguire. PER ESEMPIO. In SQL non definiamo come deve essere eseguito SELECT, dichiariamo semplicemente che vogliamo che si verifichi un SELECT.

Where() , Select() , OrderBy() sono azioni nominate nell'API. Come SQL, il nome descrive la funzione senza descrivere l'implementazione. Il modo in cui gestiscono la propria attività è delegato (in questo caso a una Lamba / Func < > / Action < >). Il delegato è solo una variabile da passare.

=> in .NET è chiamato go to operator. Vorrei leggere (A ,B) => A*B; ad alta voce come "In questa espressione, i parametri A e B vanno a A volte B"

    
risposta data 26.04.2012 - 16:26
fonte
1

Tipicamente, un metodo anonimo viene usato per fare qualcosa, quindi ne parlerei nel contesto del suo scopo. Se devo assolutamente discutere il lambda senza contesto, mi riferisco ad esso come altri hanno, cioè "la funzione anonima prende due int e restituisce la loro moltiplicazione".

Ma è raro. Più comunemente sarebbe con un contesto, come i seguenti esempi che parlano di LINQ: "La funzione Seleziona restituisce i nomi e gli ID come un nuovo oggetto" o "La funzione Dove filtra gli ID numerati pari". Lambdas è di aiuto nel programma dichiarativo, quindi parlerei di quello che sto cercando di fare.

    
risposta data 26.04.2012 - 18:38
fonte
0

I metodi anonimi sono spesso usati come valori, quindi parlane nello stesso modo in cui parlerai di altri valori o oggetti. In Objective-C sono noti come blocks , ed è tipico assegnarli a variabili o passarle come parametri ad altri metodi. In entrambi i casi, è possibile utilizzare il nome della variabile o del parametro per fare riferimento ad essi. Potresti dire "il blocco passato nel parametro completionHandler", o più semplicemente semplicemente "il completamentoHandler". Se devi descrivere un blocco fuori da questo tipo di contesto, può descrivere quello che fa: "un blocco che si ripulisce dopo che la connessione è stata chiusa."

    
risposta data 26.04.2012 - 17:20
fonte

Leggi altre domande sui tag