Améliorations de Kotlin à Java

Aperçu

Kotlin a résumé les résultats de l'étude de ce qui a été amélioré en Java, en se concentrant sur «Je ne suis pas satisfait de Java», y compris pourquoi Java est devenu une telle spécification de langage.

[Introduction]

・ J'aime Java, mais je n'ai pas utilisé Kotlin pour le moment. (Donc le contenu peut être mince) ・ Le type de langue de Kotlin, la grammaire, etc. sont beaucoup mentionnés ailleurs, donc je ne le mentionnerai pas ici.

[Blague]

Java n'est-il pas le langage le plus convaincant parmi les programmeurs côté serveur? La pensée est sublime et n'accepte pas les débutants. Contrairement à d'autres langages devenus orientés objet au milieu, il ne permet pas d'étranges échappatoires. Concevoir dans ce langage est irrésistible pour les ingénieurs qui aiment penser logiquement, non? (Lol)

[Contexte de l'enquête]

Cependant, il y a beaucoup de gens qui n'aiment pas Java car il a ses inconvénients. Et, après tout, très peu de gens veulent l'utiliser en privé (pleurer) Donc, lors de la session d'étude que je fais, j'ai vérifié s'il y avait des personnes utilisant Java en privé, et comme prévu, même une personne sur 15 n'utilisait pas Java (pleurant). Cependant, trois personnes utilisaient Kotlin. À partir de là, je me suis intéressé à Kotlin et j'ai décidé d'enquêter.

Sujet principal

Tout d'abord, Java est un endroit agréable pour moi, mais cela ressemble à ceci.

  1. Culture pour écrire tout Getter / Setter
  2. Exception d'inspection
  1. NullPointerException
  2. Type primitif et type d'objet mixtes

Comment ont-ils été améliorés! ??


1. Culture pour écrire tout Getter / Setter

[Pourquoi? ]

Tout d'abord, vous devez savoir pourquoi Java écrit tous les Getters / Setters. Je ne l'ai pas bien compris, mais quand j'ai cherché, il y avait des opinions différentes. ・ Pour masquer les variables membres et les sécuriser -Pour permettre le suivi des modifications des variables membres (faire de la place pour le traitement) Je n'étais pas convaincu par ceux-ci, et il semblait que je pouvais le définir en public, mais c'est la bonne réponse à laquelle je suis finalement arrivé. -Les variables de membre ne peuvent pas être remplacées dans les sous-classes! Alors enveloppez-le dans une méthode et remplacez cette méthode si vous voulez que la sous-classe change son comportement.

[Amélioration]

C'est maintenant une propriété en C #, ruby, swift. Vous n'avez donc pas besoin d'écrire Getter / Setter. Les propriétés peuvent être remplacées dans les sous-classes. Vous pouvez également abstraire et forcer l'implémentation dans des sous-classes.

2. exception cochée

[quoi? ]

Il semble que ce soit la seule méthode adoptée uniquement en Java. Les exceptions levées par une méthode doivent être explicitement déclarées dans le cadre de la syntaxe de la méthode, et l'appelant doit la gérer ou la lancer ci-dessus.

public FileInputStream(String name)
                throws FileNotFoundException

Cela présente les avantages suivants:

De nombreux langages et mécanismes traitent les exceptions comme à l'exécution, et vous ne savez pas quel type d'exceptions se produira jusqu'à ce qu'elles se produisent réellement, et si elles peuvent provenir de ce processus en premier lieu. Surtout dans le cas de Java, puisque vous pouvez comprendre les types d'exceptions, vous pouvez vous attendre à beaucoup de récupération d'exceptions. [Source: Rethinking inspection exceptions](http://qiita.com/Kokudori/items/0fe9181d8eec8d933c98#java%E3%81%AE%E6%A4%9C%E6%9F%BB%E4%BE%8B%E5 % A4% 96)

Cependant, cela est maintenant considéré comme une erreur et n'a pas été incorporé dans d'autres langages orientés objet qui représentent C #.

Les clauses de rattrapage sans signification sont produites en masse et réduisent en fait la qualité du programme. Source: L'évolutivité des exceptions vérifiées

[Amélioration]

Les exceptions vérifiées ne sont plus appliquées et la gestion des exceptions par l'appelant n'est plus appliquée.

  1. NullPointerException

[quoi? ]

Se produit si vous utilisez des variables avant la création de l'instance.

//Erreur d'exécution pour Java
String s = null;
s.length(); // java.lang.NullPointerException

[Amélioration]

Cela ne peut pas être aidé, non? J'ai pensé, mais les langues modernes ont un mécanisme pour garantir cela. Référence: les langues non sécurisées nulles ne sont plus des langues héritées

Dans Kotlin, s'il peut être Null, il est spécifié au moment de la déclaration, et s'il peut être Null, cela entraînera une erreur de compilation à moins qu'il ne soit vérifié au préalable.

//Variable?Null peut être défini dans la déclaration ci-jointe.?Un réglage nul n'est pas possible sans lui.
val s: String? = null  
s.length //Erreur de compilation: only safe (?.) or non-null

//OK écriture
val s:String? = null
if (s != null){
    s.length // OK
}

4. Type primitif et type d'objet mixtes

Comme vous le savez, Java a huit types primitifs (booléen, char, byte, short, int, long, float, double), qui ont des classes wrapper pour les types d'objet.

[Pourquoi? ]

Pourquoi existe-t-il des types primitifs de variables? Java a pris nombre de ses idées du C ++. Les variables de type primitif en font partie. Et j'étais heureux d'avoir visé l'afflux de programmeurs C ++ existants en incorporant cela. De plus, le type primitif semble avoir l'avantage d'une vitesse de traitement élevée. Référence: types primitifs considérés comme nuisibles

Référence: faille inconnue dans Java

[problème]

-Il est nécessaire d'utiliser correctement le traitement tout en sachant si la variable manipulée est un type primitif ou un type d'objet. ⇒ [Exemple] Les types primitifs peuvent être comparés à ==, les types d'objets utilisent .equals (), etc. -Afin de passer une variable de type primitif à une méthode qui prend un type d'objet comme argument, il est nécessaire de la convertir une fois en type d'objet, ce qui gaspille de la mémoire.

[Amélioration]

Il n'y a pas de types primitifs dans Kotlin. (Cependant, on peut dire qu'une partie de la commodité du type primitif a été perdue.)


C'est tout, mais pour le moment, j'avais l'impression que les parties que je ne pourrais pas dire personnellement étaient presque améliorées.

Si j'ai quelque chose à voir avec Java, j'adorerais utiliser Kotlin.

Recommended Posts

Améliorations de Kotlin à Java
[Java] Introduction à Java
Introduction à Java
La sécurité Null de Kotlin à envoyer aux développeurs Java
Changements de Java 8 à Java 11
Somme de Java_1 à 100
[Java] Connectez-vous à MySQL
De Java à Ruby !!
Introduction à la commande java
Comment abaisser la version java
Migration de Cobol vers JAVA
Comment désinstaller Java 8 (Mac)
Java - Comment créer JTable
Comment utiliser java Facultatif
Nouvelles fonctionnalités de Java7 à Java8
Comment réduire les images Java
Comment rédiger un commentaire java
Comment utiliser la classe Java
Connectez-vous de Java à PostgreSQL
[Java] Comment utiliser removeAll ()
[Java] Comment afficher les Wingdings
[Java] Introduction à l'expression lambda
Shell pour tuer les processus Java
Comment utiliser Java Map
Comment définir des constantes Java
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
[java] Raisons d'utiliser statique
Comment utiliser les variables Java
[Java] Introduction à l'API Stream
Java8 pour démarrer maintenant ~ Facultatif ~
Comment convertir la base Java
[Java] Convertir ArrayList en tableau
Thread Java pour comprendre vaguement
[Java] Comment implémenter le multithreading
De Java inefficace à Java efficace
Comment initialiser un tableau Java
[Introduction aux jeux Janken (comme)] Java
Entrée dans la console Java
Comment étudier Java Silver SE 8
Comment utiliser HttpClient de Java (Get)
Appeler la classe scellée de Kotlin depuis Java
Opération pour connecter plusieurs Streams @Java
Java pour apprendre avec les ramen [Partie 1]
Étudier Java # 6 (Comment écrire des blocs)
[java8] Pour comprendre l'API Stream
Multithread pour s'adapter au modèle [Java]
[Java] Points à noter avec Arrays.asList ()
[Introduction à Java] À propos de l'API Stream
Java pour extraire le contenu de texte PDF
Comment créer un conteneur Java
En route vers l'acquisition de Java SE 11 Silver
Comment désassembler un fichier de classe Java
Java ajoute des graphiques SmartArt à PowerPoint
Classe Kotlin à envoyer aux développeurs Java
Comment utiliser HttpClient de Java (Post)