Rapprochez-vous un peu de Java 8

Rapprochez-vous un peu de Java 8

Java, un langage de programmation créé par James Gosling en 1991, était censé écrire un programme qui pourrait fonctionner sur plusieurs systèmes d'exploitation. Oracle a maintenant le Steermarthip pour Java et poursuit le projet au nom d'OpenJDK. Au cours de l'époque, plusieurs nouvelles versions améliorées de Java ont été publiées dont le actuel est 1.8 populairement connu sous le nom de Java 8.

  • Lisez ceci => Comment installer Java 8 sur Centos, Red Hat et Fedora
  • Lire ceci => Comment installer Java 8 sur Ubuntu & Linuxmint

La langue a été conçue en incorporant ces propriétés:

  • Plateforme indépendante- Le programme utilise la machine virtuelle Java comme abstraction et n'accède pas directement au système d'exploitation. Ce qui rend les programmes Java très portables.
  • Programmation orientée objet- En dehors des types de données primitifs, tous les éléments de Java peuvent être considérés comme des objets.
  • Langage de programmation fortement typé- Oui! Java est un langage de programmation fortement typé. Par exemple, les types de variables utilisées doivent être prédéfinis et la conversion à d'autres objets devient à peu près stricte. Cela doit être fait dans le cas d'un programmeur.
  • Langue interprétée et compilée- Le code source Java doit être transféré dans le format bytecode, celui qui ne dépend pas de la plate-forme cible. Les instructions sont interprétées par la machine virtuelle Java (JVM). Le JVM contenant de la soi-disant hotspot-composiler a le potentiel de traduire les instructions de bytecode critiques de performances dans les instructions de code natif.
  • Gestion automatique de la mémoire- Java est une telle plate-forme qui gère avec succès l'allocation et la désallocation de la mémoire pour la création de nouveaux objets. Le programme n'a pas d'accès direct à la mémoire. Et par conséquent, Garbage Collector supprime automatiquement les objets auxquels aucun pointeur actif n'existe.

En tant que développeur jQuery, je travaille beaucoup avec Java 8 au cours des dernières années, que ce soit de nouvelles applications ou la migration existante. Et je suppose que c'est le bon moment pour noter certaines des meilleures pratiques que j'ai trouvées à peu près utiles. Ce billet de blog traite des flux, je.e. les opérations les plus importantes qui peuvent être effectuées dans votre code. Méthodes par défaut, Lambdas et Streams et utilisant facultatif et ainsi de suite pour représenter les valeurs absentes.

Méthodes par défaut dans les interfaces

La possibilité de spécifier des implémentations de méthode par défaut dans les interfaces a été ajoutée par JDK 8 afin que les collections puissent évoluer sans casser la compatibilité en arrière. Dans les versions précédentes, nous n'avons pu ajouter aucune méthode à l'interface sans toutes les sous-classes d'implémentation. Avec l'aide de la version 1.8, nous pouvons marquer une méthode avec le mot-clé par défaut et fournir le corps de la méthode directement dans l'interface.
En bas ci-dessous mentionné est un exemple d'interface appelée débogue. Il est destiné à vous montrer comment l'API de réflexion est utilisée pour obtenir l'accès aux champs de l'objet et fournit une implémentation ToString () décente pour l'objet qui imprime les valeurs des champs.

Interface publique Debuggable Default String Debug () StringBuilder sb = new StringBuilder (ceci.getClass ().getName ()); sb.Ajouter ("["); Champ [] champs = ceci.getClass ().getDeclaredFields (); pour (champ f: champs) f.setAccessible (true); essayez sb.ajouter (f.getName () + "=" + f.obtenir (this)); sb.Ajouter (","); catch (illégalArgumentException | illégalAccessException e) Throw New RuntimeException (e); SB.ajouter("]"); retourner sb.toString ();
123456789101112131415161718Interface publique Debuggable Default String Debug () StringBuilder sb = new StringBuilder (ceci.getClass ().getName ()); sb.Ajouter ("["); Champ [] champs = ceci.getClass ().getDeclaredFields (); pour (champ f: champs) f.setAccessible (true); essayez sb.ajouter (f.getName () + "=" + f.obtenir (this)); sb.Ajouter (","); catch (illégalArgumentException | illégalAccessException e) Throw New RuntimeException (e); SB.ajouter("]"); retourner sb.toString ();

Lambdas dans les ruisseaux

Malheureusement, jusqu'à présent, Java était considérée comme un langage de programmation approprié pour les techniques de programmation fonctionnelle. La seule raison était que les fonctions n'étaient pas les citoyens de première classe de la langue. En fait, il n'y avait pas de moyen soigné et accepté de se référer à un bloc de code par un nom et de le faire passer. En conséquence, Lambdas apporte un changement radical. Aujourd'hui, les références de méthode peuvent être utilisées pour le meilleur ou pour le pire, pour se référer à une méthode spécifique, attribuer les fonctions en variables, les passer et profiter de tous les avantages que le paradigme de programmation fonctionnelle offre.
Les bases sont à peu près simples, un tas d'interfaces sont créées. Par exemple:

// prend un long, renvoie une fonction de chaîne f = l -> l.toString (); // ne prend rien vous donne le fournisseur de threads s = thread :: currentThread; // prend une chaîne comme paramètre Consumer C = Système.Out :: println;
12345678// prend un long, renvoie une fonction de chaîne f = l -> l.toString (); // ne vous donne rien vous donne threadsSupplier s = thread :: currentThread; // prend une chaîne comme paramètre Consumer C = Système.Out :: println;

La mise en garde mentionnée ici est le code utilisé pour gérer au cas où vous laissez les fonctions anonymes se développer sur un certain seuil. Le code spécifie le flux de données. Tout ce que vous avez à faire est simplement de brancher les fonctionnalités spécifiques, en particulier celle que vous souhaitez exécuter dans le cadre.

En un mot

Lorsque vous travaillez avec des flux, n'oubliez pas que vous devez transformer les valeurs contenues dans le flux avec les fonctions que vous fournissez par exemple en utilisant la syntaxe lambda. Quelques plats à emporter:

  • Dans le cas, si le code ne spécifie pas le cadre du flux de données dans lequel vous branchez vos fonctions, il vaut la peine d'éviter de multiplier les Lambdas. Une classe appropriée pourrait être plus lisible.
  • Si votre lambda se développe au-dessus de 3 lignes de code - divisez-la: soit en plusieurs invocations de carte () qui traitent les données en étapes ou extraire une méthode et utilisez la syntaxe de référence de méthode pour y référer.
  • N'attribuez pas les lambdas et les fonctions aux champs des objets. Les lambdas représentent des fonctions et celles-ci sont mieux servies pures.