2015-11-05 9 views
5

Ciò causerà confusione nell'uso di termini intercambiabili "funzione" vs "metodo" in java7 e java8?È un errore concettuale utilizzare "funzione" di termine anziché "metodo" in java 7 e java 8?

So che java 8 ha introdotto alcuni concetti come lambda calcolo, che consente di inserire piccoli bit di paradigma funzionale da utilizzare.

Funzioni come nel calcolo lambda, programmazione funzionale.

+0

Ho pensato che fosse solo una questione di convenzione terminologica, utilizzare "funzione" in C/C++ e "metodo" in Java. –

+1

Penso che [questa domanda] (http://stackoverflow.com/q/155609/1743880) riguardi effettivamente questo: anche se non menziona esplicitamente Java '' '' '' '' ', sono funzioni nel senso della risposta. – Tunaki

+0

In un'altra nota, gli oggetti dovrebbero essere chiamati classi e viceversa, poiché 'Object' è una classe e' Class.class' è un oggetto? – Kayaman

risposta

2

Probabilmente può ottenere via con la funzione e il metodo di interscambio durante discorso non formale, ma se si vuole essere precisi tenere a mente che: non

  • metodo è sempre associato a qualche oggetto o classe, funzione (sebbene in Java non sia possibile definire funzioni al di fuori della classe o dell'oggetto), la funzione
  • deve sempre restituire un valore, il metodo potrebbe non restituire nulla (il tipo di ritorno non è un valore reale) (void).

In generale, ora si sa che c'è una differenza tra una funzione e un metodo, quindi basta tenerlo a mente e usare il termine appropriato d'ora in poi.

1

Le funzioni sono diverse dai metodi indipendentemente dalla versione java. Anche se con java 8 questi termini sono più significativi ora. Anche con le versioni precedenti di java, è possibile visualizzare le funzioni come metodi statici in quanto non sono associati ai dati della classe.

3

Quando si parla di Java-8 è possibile utilizzare la parola "funzione" per fare riferimento all'interfaccia funzionale (interfaccia con metodo astratto singolo), alla classe che implementa tale interfaccia o all'espressione del tipo di interfaccia funzionale (inclusa espressione lambda o metodo di riferimento). Non dovresti comunque chiamare metodi come funzioni. Questo diventa ancora più importante rispetto alle versioni precedenti di Java, come se si vedesse la parola "funzione" nella discussione relativa a Java-7, si può presumere che il "metodo" fosse inteso. Ma in Java-8 le persone potrebbero pensare di parlare di interfaccia funzionale, non di metodo.

Quindi è ok per dire:

Il metodo Stream.map accetta una funzione come parametro.

O

Un'interfaccia Collector aggregati quattro funzioni: il fornitore, accumulatori, combinatore e di finitura.

O

mi passano la funzione Objects::nonNull al metodo Stream.filter.

ma il seguente dovrebbe sembrare confuso:

ottengo uno strano un'eccezione quando uso Math.sqrt funzione.