まだJavaでコーディングしていますか? 変更する時が来ました

画像






非常に長い間、コトリンに目を向けたくありませんでした。 しかし、欠員のリストをめくると、グラフにますます気づき始めました。Kotlin知識もプラスになります。 そして、なんとなく夕方、私はこの記事をハブで見ました: 8つのトレーニングプロジェクト 。 そこで私は暗号通貨トラッカーが好きでした。 しかし、どういうわけかそれは単純すぎました。通常のGetリクエストであり、まったく面白くありません。 そして、ここで私はこれらすべてをKotlinで書くことにしました。 暗号通貨トラッカーは、Kotlinの研究のトレーニング場になりました。 この添付ファイルを作成した後、いくつかの重要な教訓を学びました。



猫を求めることに興味がある人。



私について簡単に



私がすべてを始めたとき、私はこの言語について多くの偏見を持っていました。 彼は快適ではない、彼はハンサムではない、彼は悪い、そして抑制されている。 それは、私が快適ゾーンを離れたくなかったからです。 私はJavaが優れていることを知っています。一般に、なぜ何かを変え、すべてをそのままにして、なぜ緊張するのでしょう。 しかし、関心が犠牲になりました。 そして、私は非常に間違っていたと言うことができます。



KotlinでJavaにない特別なものは何ですか?



1.セミコロンの欠如



最初から目を引いた。 手はまだひきつりましたが: しかし、このような些細なことの存在/不在は、言語をまったく愛する/憎む理由ではありません(数千行のコードがある場合でも、すでに些細なことではありません)。



2.ビューのバインド



レイアウトをリベットで留め終わるとすぐに、ビューをバインドする方法についての質問が生じました。 グーグルに登った:「バターナイフコトリン」。 それは私が泳いだ場所です。 KotlinでButterKnifeを使用しても意味がないことがわかりました。 NPEを取得するリスクはほとんどありませんが、ビューを取得して使用するだけです。



Javaでコードを記述すると、それが得られます
public class MainActivity { private TextView textView; //1-  @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.textView);//2-  textView.setText("Hello world!");//3-  } }
      
      







今ButterKnifeで書く
 public class MainActivity...{ @BindView(R.id.textView)TextView textView; //1-  @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this);//2-  textView.setText("Hello world!");//3-  } }
      
      







そして今、コトリン
 class MainActivity: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) textView.text = "Hello world!"//1-    } }
      
      







3. NPEの欠如



NPEは、プログラミングの世界の伝説です。 また、Kotlinでは、コンパイル前でも存在しないため、NullPointerExceptionが発生する可能性のある場所は構文エラーと見なされます。 あなたは単にnullチェックを強制されます。



4.コードは桁違いに短い



統計によると、Kotlinのコードは40%短く、これは簡単に検証できます。 答えを解析するために、モデルを作成する必要がありました。 これほど多くのフィールドを持つモデルがこれほど短くなるとは考えていませんでした。



コトリンの美しく短いモデル
 data class ResponseItem(@SerializedName("id") @Expose var id: String?, @SerializedName("name") @Expose var name: String?, @SerializedName("symbol") @Expose var symbol: String?, @SerializedName("rank") @Expose var rank: String?, @SerializedName("price_usd") @Expose var priceUsd: String?, @SerializedName("price_btc") @Expose var priceBtc: String?, @SerializedName("24h_volume_usd") @Expose var _24hVolumeUsd: String?, @SerializedName("market_cap_usd") @Expose var marketCapUsd: String?, @SerializedName("available_supply") @Expose var availableSupply: String?, @SerializedName("total_supply") @Expose var totalSupply: String?, @SerializedName("max_supply") @Expose var maxSupply: String?, @SerializedName("percent_change_1h") @Expose var percentChange1h: String?, @SerializedName("percent_change_24h") @Expose var percentChange24h: String?, @SerializedName("percent_change_7d") @Expose var percentChange7d: String?, @SerializedName("last_updated") @Expose var lastUpdated: String?)
      
      





実際には、1行に2つの注釈(公開およびシリアル化)があるため、コードは短くなります。



Javaの同じクラス。 優しくシーコード!
 @SerializedName("id") @Expose private String id; @SerializedName("name") @Expose private String name; @SerializedName("symbol") @Expose private String symbol; @SerializedName("rank") @Expose private String rank; @SerializedName("price_usd") @Expose private String priceUsd; @SerializedName("price_btc") @Expose private String priceBtc; @SerializedName("24h_volume_usd") @Expose private String _24hVolumeUsd; @SerializedName("market_cap_usd") @Expose private String marketCapUsd; @SerializedName("available_supply") @Expose private String availableSupply; @SerializedName("total_supply") @Expose private String totalSupply; @SerializedName("max_supply") @Expose private Object maxSupply; @SerializedName("percent_change_1h") @Expose private String percentChange1h; @SerializedName("percent_change_24h") @Expose private String percentChange24h; @SerializedName("percent_change_7d") @Expose private String percentChange7d; @SerializedName("last_updated") @Expose private String lastUpdated; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSymbol() { return symbol; } public void setSymbol(String symbol) { this.symbol = symbol; } public String getRank() { return rank; } public void setRank(String rank) { this.rank = rank; } public String getPriceUsd() { return priceUsd; } public void setPriceUsd(String priceUsd) { this.priceUsd = priceUsd; } public String getPriceBtc() { return priceBtc; } public void setPriceBtc(String priceBtc) { this.priceBtc = priceBtc; } public String get24hVolumeUsd() { return _24hVolumeUsd; } public void set24hVolumeUsd(String _24hVolumeUsd) { this._24hVolumeUsd = _24hVolumeUsd; } public String getMarketCapUsd() { return marketCapUsd; } public void setMarketCapUsd(String marketCapUsd) { this.marketCapUsd = marketCapUsd; } public String getAvailableSupply() { return availableSupply; } public void setAvailableSupply(String availableSupply) { this.availableSupply = availableSupply; } public String getTotalSupply() { return totalSupply; } public void setTotalSupply(String totalSupply) { this.totalSupply = totalSupply; } public Object getMaxSupply() { return maxSupply; } public void setMaxSupply(Object maxSupply) { this.maxSupply = maxSupply; } public String getPercentChange1h() { return percentChange1h; } public void setPercentChange1h(String percentChange1h) { this.percentChange1h = percentChange1h; } public String getPercentChange24h() { return percentChange24h; } public void setPercentChange24h(String percentChange24h) { this.percentChange24h = percentChange24h; } public String getPercentChange7d() { return percentChange7d; } public void setPercentChange7d(String percentChange7d) { this.percentChange7d = percentChange7d; } public String getLastUpdated() { return lastUpdated; } public void setLastUpdated(String lastUpdated) { this.lastUpdated = lastUpdated; }
      
      







さて、あなたは反転にうんざりしていませんか?



違いは表面にあると思います。 あなたは言う:まあ、これらはモデルです、これは彼らに起こります。 RecylerView用のアダプターを作成したとき、長さはわずか50行でした。 Javaの同じアダプターは80〜90行かかります。



5.ゲッターとセッターなし



これは、Kotlinのモデルが非常に短い主な理由の1つです。 変数の値を変更するには、次のように簡単です。



 someModel.name = "new name"
      
      





Javaでは、同じ結果を得るために、セッターを宣言してからアクセスする必要があります。 また、1つのセッターは3行のコードを受け取ります。 前の例で見たように、この違いは重要です。



おわりに



実際、Kotlinにははるかに多くの利点があります。明確に明らかなものについてのみ書きました。Kotlinチップの詳細については、言語のドキュメントをご覧ください。 原則として、私はそれが好きで、次回は実際のプロジェクトで使用します。 私の先制的な意見にもかかわらず、彼は自分が最高であることを示しました。 コードはJavaよりもはるかにシンプルで短いです。 現在、Kotlinはトレンドであり、同時に彼は急速に勢いを増しています。 2年前、それは湿っているとみなされ、すべてのAndroidユーザーの5%未満がそれを使用していました。 このような言語を手荷物に入れると、開発中のインタビューや、kotlinの利点が得られます。JavaScriptコードはバイトにコンパイルされるため、プロファイルを変更するときに1日で役立ちます。



今日私が学んだ最も重要な教訓は、新しいことに挑戦することを恐れる必要はないということです。おそらく古いものよりも優れているでしょう。



All Articles