J'utilise généralement des langages de script.
J'ai eu une rare opportunité de toucher Java, alors À propos des expressions Java lambda que je ne connaissais que peu Bien que ce soit le moment de la sortie de Java 11, je vais le résumer pour confirmation.
Disons que vous faites partie d'une excellente équipe de développement de jeux. Je serai en charge de la partie liée au nom de l'utilisateur. À l'avenir, le titre du personnage principal changera pour chaque personnage, j'ai donc été chargé du développement de l'API autour de cela.
Définit l'interface responsable du formatage du nom.
NameFormatter.java
interface NameFormatter {
public abstract String format(String familyName, String firstName);
}
La classe d'implémentation et la partie d'exécution principale ressemblent à ceci.
Chanformatter.java
class ChanFormatter implements NameFormatter {
@Override
public String format(String familyName, String firstName){
return firstName + "Chan";
}
}
Main.java
class Main {
public static void main(String[] args){
String familyName = "Date";
String firstName = "Masamune";
NameFormatter nf = new ChanFormatter();
String formatted = nf.format(familyName, firstName);
System.out.println("salut!" + formatted + "。");
System.out.println("Je commence un grand jeu!");
}
}
Cliquez ici pour le résultat de l'exécution
salut! Masamune-chan.
Je commence un grand jeu!
C'est familier.
Au contraire, préparons un autre formateur pour le noble personnage.
DonoFormatter.java
class DonoFormatter implements NameFormatter {
@Override
public String format(String familyName, String firstName){
return familyName + "Tono";
}
}
Vous pouvez facilement changer le nom en changeant simplement la nouvelle classe dans la section d'exécution principale.
Main.java(diff)
String familyName = "Date";
String firstName = "Masamune";
- NameFormatter nf = new ChanFormatter();
+ NameFormatter nf = new DonoFormatter();
String formatted = nf.format(familyName, firstName);
System.out.println("salut!" + formatted + "。");
salut! Date.
Je commence un grand jeu!
Maintenant, disons que vous en avez assez d'une excellente équipe de développement de jeux. En effet, il n'est pas possible de dépenser des frais de personnel pour l'entretien d'un groupe de classe aussi petit. L'équipe de développement a décidé d'implémenter le formateur en utilisant une classe anonyme.
Au lieu de créer des fichiers individuels pour une classe de cette taille La classe anonyme est une fonction à définir et à éliminer sur place.
Avec la classe anonyme, vous n'avez besoin que des deux fichiers suivants:
Nameformatter.java
//Republier
//Comme ci-dessus
interface NameFormatter {
public abstract String format(String familyName, String firstName);
}
Main.java
class Main {
public static void main(String[] args){
NameFormatter chan = new NameFormatter(){
@Override
public String format(String familyName, String firstName){
return firstName + "Chan";
}
};
NameFormatter dono = new NameFormatter(){
@Override
public String format(String familyName, String firstName){
return familyName + "Tono";
}
};
String familyName = "Date";
String firstName = "Masamune";
String formatted = chan.format(familyName, firstName);
System.out.println("salut!" + formatted + "。");
System.out.println("Je commence un grand jeu!");
}
}
C'est une forme dans laquelle la méthode de format est liée à la variable.
En passant, c'est l'expression lambda du sujet principal.
Dans la situation comme cette fois
La seule méthode que la classe NameFormatter
doit implémenter est format
.
Par conséquent, vous ne pouvez remplacer que la méthode format
.
Je pense qu'il est redondant de copier et coller à chaque fois avec le format public String (String familyName, String firstName)
. Je veux que vous fassiez de mon mieux pour le compilateur.
Le style Lambda est une notation qui peut répondre à une telle demande. Il peut s'écrire comme suit.
Main.java
class Main {
public static void main(String[] args){
NameFormatter chan = (String familyName, String firstName) -> {
return firstName + "Chan";
};
NameFormatter dono = (String familyName, String firstName) -> {
return familyName + "Tono";
};
String familyName = "Date";
String firstName = "Masamune";
String formatted = chan.format(familyName, firstName);
System.out.println("salut!" + formatted + "。");
System.out.println("Je commence un grand jeu!");
}
}
J'ai pu écrire clairement. c'est tout.
C'est tout pour l'expression lambda. L'expression lambda elle-même n'est qu'une abréviation pour une classe anonyme, pas un gros sujet.
Le cercle principal n'est pas de type lambda, mais les deux points suivants.
java.util.function
)Cette fois, j'ai utilisé l'interface d'origine appelée NameFormatter
,
De nombreuses interfaces sont fournies et sont destinées à utiliser des expressions lambda.
L'un d'eux est java.util.function.Function <T, R>
.
De plus, de nombreuses méthodes communes aux types de fonctions telles que map
et filter
ont été ajoutées en tant qu'API Java Stream.
Ces méthodes sont utilisées en passant l'interface de java.util.function
comme argument.
Le style Lambda n'est pas effrayant.
Je veux pouvoir utiliser l'API Stream en douceur
Comprendre les expressions Java 8 Lambda-Qiita
Recommended Posts