Ce à quoi j'ai pensé lorsque j'ai commencé à migrer de Java vers Kotlin

Commencé à écrire Kotlin

J'ai jusqu'à présent écrit des applications Android développées par la société en Java, mais avec le support officiel de la version Android Studio 3.0 = Kotlin fin octobre, j'ai décidé d'utiliser Kotlin pour implémenter la nouvelle partie développement. De plus, la partie implémentation existante est réécrite petit à petit selon les besoins (également pour la pratique).

Donc, je ne l'ai pas encore utilisé depuis un mois, mais j'écrirai ce que j'ai ressenti en écrivant Kotlin.

Merci pour l'existence de l'option

Il n'est pas nécessaire de l'écrire à nouveau, mais c'est ce que je vais mentionner.
Par rapport à Swift, qui est également utilisé lors de l'écriture d'applications natives, je craignais de devoir faire attention à l'apparition de gluants, mais cela a été résolu. Bien sûr, même en Java, vous pouvez l'éviter en cochant Null ou en utilisant ʻOptional.ofNullable`, mais c'était bien d'avoir un monde où Nullable et NotNull sont clairement séparés.

J'aime écrire la «garde» de Swift comme utiliser l'opérateur Elvis.

sample.kt


val str: String = optionalStr ?: return

Afin de ne pas effacer la bonté de l'option, il faut également faire attention du côté Java

Lorsqu'il s'agit d'un projet dans lequel Java et Kotlin sont mélangés, il y a bien sûr des cas où Kotlin appelle du code Java. Dans un tel cas, si vous ajoutez une annotation côté Java, les restrictions optionnelles de Kotlin entreront en vigueur.

Par exemple, supposons que vous ayez le code suivant du côté Java.

AppUtil.java


public class AppUtil {
    public static String getVersion() {
        return "1.0";
    }
}

Lorsqu'elle est appelée du côté Kotlin, la valeur de retour de ʻAppUtil.getVersion () sera String! , Et les deux String et String? Seront autorisés. Si vous entrez par inadvertance même s'il est nul, vous reviendrez à l'ère gluante. Cela perdra son caractère, alors ajoutez l'annotation @ NonNull ou @ Nullable` à la méthode côté Java. L'EDI va maintenant déduire que le type de retour est «String» ou «String?».

l'extension est pratique

Vous pouvez créer de nouvelles méthodes et propriétés dans des classes existantes. Quand j'écrivais en Java, ce n'était pas pratique de ne pas avoir cela par rapport à Swift. (Pour y parvenir, il y avait pas mal de méthodes statiques de classes comme HogeUtil)

Extension.kt


fun Button.disableTouch() {
    alpha = 0.5f
    isEnabled = false
}

Ce qui précède est un exemple d'ajout d'une méthode à ʻandroid.widget.Button`.

Méthodes statiques et variables statiques en Java, etc.

Les méthodes et propriétés statiques que j'utilise souvent n'existent pas dans Kotlin. Par exemple, comment exprimer une méthode de fabrique comme public static HogeFragment newInstance (...) {...} que j'écrivais habituellement dans le fichier fragment est d'utiliser l'objet compagnon comme l'une des solutions. Il y a une main.

HogeFragment.kt


class HogeFragment : Fragment() {
    companion object {
        fun newInstance(...): HogeFragment {
            ...
        }
    }
}

HogeFragment.kt


companion object {
    @JvmStatic
    fun newInstance(...): HogeFragment {
        ...
    }
}

D'autre part, pour exprimer des méthodes statiques (choses médiocres), vous pouvez également utiliser les fonctions de niveau supérieur du fichier.

HogeFragment.kt


fun topLevelFun(...) {
    ...
}
 
class HogeFragment : Fragment() {
    ...
}

Je me demandais si la première méthode (celle qui utilise Companion Object) est fondamentalement bonne car elle peut être appelée de la même manière qu'en Java et il n'y a pas besoin de s'inquiéter des conflits de noms. Cependant, j'ai récemment lu les blogs suivants, etc., et j'ai appris d'une manière ou d'une autre avec une image de la façon de les utiliser correctement. companion object vs. top-level - hydrakecat’s blog

La même chose est vraie pour les variables statiques, l'une consiste à déclarer des propriétés dans l'objet compagnon et l'autre à les déclarer au niveau supérieur. (Pour le premier, si vous ajoutez @ JvmField, vous pouvez l'appeler de la même manière qu'en Java.)

fin

Donc, je n'ai pas encore commencé à l'utiliser, mais j'ai écrit un peu sur ce que j'ai ressenti quand j'ai écrit Kotlin.
En plus de ce que j'ai écrit ci-dessus, je suis également heureux qu'il ait une sensation d'écriture similaire à Swift et que la quantité de code soit réduite par rapport à Java. Je pense qu'il peut être utilisé côté serveur.

[PR] Recherche d'amis

Nous recherchons des amis pour écrire ensemble Kotlin, Swift, Rails et Python chez Atlae! https://www.green-japan.com/company/172

Recommended Posts

Ce à quoi j'ai pensé lorsque j'ai commencé à migrer de Java vers Kotlin
Résumé des points qui m'inquiétaient lors de la migration de Java vers Kotlin
Ce que j'ai fait lorsque j'ai converti Java en Kotlin
Précautions lors de la migration de VB6.0 vers JAVA
Ce que j'ai pensé quand j'ai commencé à travailler comme ingénieur
Ce que j'ai recherché sur Java 6
Ce que j'ai recherché sur Java 9
Ce que j'ai recherché sur Java 7
Ce que j'ai appris sur Kotlin
Ce que j'ai recherché sur Java 5
Comment écrire et noter lors de la migration de VB vers JAVA
ClassCastException se produit lors de la migration de Java7 vers Java8 ~ Génériques et surcharge ~
Ce que j'ai recherché sur l'apprentissage Java
Remarques sur la création de l'environnement de développement de Kotlin et la migration de Java vers Kotlin
Modifications lors de la migration de Spring Boot 1.5 vers Spring Boot 2.0
Modifications lors de la migration de Spring Boot 2.0 vers Spring Boot 2.2
Ce que j'ai appris du calcul monétaire Java
Mémo pour la migration de Java vers Kotlin
Ce que j'ai pensé en passant la valeur d'entrée de l'utilisateur à la classe Service
Exécuter R à partir de Java Je veux exécuter rJava
Migrer de Java vers Kotlin côté serveur + Spring-boot
Premiers pas avec Kotlin à envoyer aux développeurs Java
Je veux écrire rapidement de java vers sqlite
Ce que des personnes inexpérimentées en Java ont fait pour étudier Kotlin
Changements de Java 8 à Java 11
Somme de Java_1 à 100
[Java] Je souhaite calculer la différence par rapport à la date
Comportement lors de l'appel des méthodes d'argument de longueur variable Java à partir de Scala / Kotlin / Java
De Java à Ruby !!
Ce que j'ai appris lors de la création d'un serveur en Java
Je veux faire des transitions d'écran avec kotlin et java!
J'ai essayé de découvrir ce qui avait changé dans Java 9
Quand j'ai commencé ansible + docker maintenant, j'ai trébuché depuis le début, mais j'ai réussi à le démarrer
11 éléments que je ne sais pas s'il est bon de savoir sur JAVA
Ce à quoi j'étais accro lors de l'introduction de la bibliothèque JNI
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
J'ai essayé de résumer les bases de kotlin et java
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
[Opensaml] NoClassDefFoundError se produit lors du passage de Tomcat à weblogic
Je veux implémenter diverses fonctions avec kotlin et java!
Remarques sur le code de caractère lors de la migration de Windows vers Mac
À propos de la distribution intelligente dans le rappel du fragment à l'activité dans Kotlin
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
Migration de Cobol vers JAVA
Nouvelles fonctionnalités de Java7 à Java8
Connectez-vous de Java à PostgreSQL
[Swift] J'ai pensé à comparer
De Java inefficace à Java efficace
Comment gérer le type auquel j'ai pensé en écrivant un programme Java pendant 2 ans
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java)
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (1)
J'ai essayé de traduire le message d'erreur lors de l'exécution d'Eclipse (Java)
Ce à quoi j'étais accro lors de la mise en œuvre de l'authentification Google avec des rails
[Note] Ce que j'ai appris en six mois grâce à des inexpérimentés (Java) (3)
Ce que j'ai appris en travaillant Java avec Visual Studio Code