コトリンとスウィフト。 モバイル開発の新時代?







この投稿は、 KotlinとSwiftの記事の無料翻訳です モバイル開発のまったく新しい時代ですか? アンドリュー・チャーカシン







GoogleがAndroid開発にKotlinを正式に使用すると発表したとき、私は他の多くのAndroid開発者と同じように安reliefのため息をつきました。 もう一度Kotlinの公式サイトにアクセスして、機能/構文を再確認し、現在作成中のSwiftの最新バージョンと比較しました。突然、これが感じられました。









Swiftのように、Kotlinには多くの構文糖があり、通常のルーチンの量を減らします( ここでの構文比較)。 しかし、特に嬉しいのは、箱から出してすぐに両方が新しいプログラミングパラダイムをサポートしていることです。 特に関数型プログラミング。







もちろん、関数型プログラミングの原則は開発の新しいものではなく、まったく逆です。 しかし、iOSとAndroidの開発には「すぐに使える」公式サポートがあるため、それらを使用する価値があります。







モバイル開発のキャリアを始めたばかりの頃、誰もが次のようなサイクルを書きました。







Java:







String[] mixedArray = new String[] { "4", "5", "a", "-2", "Str" }; int results = 0; for (String element : mixedArray) { results += Integer.parseInt(element); }
      
      





現在、誰もが機能的なアプローチを使用して同じ呼び出しを1回の呼び出しで実行していますが、このアプローチははるかに優れています。







コトリン:







 val mixedArray = arrayOf("4", "5", "a", "-2", "Str") val results = mixedArray .filter { obj -> obj.toIntOrNull() != null } .map { x -> x.toInt() } .reduce { acc, x -> acc + x }
      
      





スイフト:







 let mixedArray = ["4", "5", "a", "-2", "Str"] let results = mixedArray .filter({ (obj) -> Bool in return Int(obj) != nil }) .map { (obj) -> Int in return Int(obj)! } .reduce(0, +)
      
      





開発者の生活を改善し、コールバックとして使用できるJavaの匿名クラスに一致させるために、2010年にAppleがObjective-C用にブロックを導入しました( iOS SDK 4.0 )。







Objective-Cのサンプルブロック:







 void (^newBlock)(void) = ^{ NSLog(@"New block is called"); };
      
      





Javaの匿名クラスの例:







 (new CallbackClass() { @Override public void call() { Log.i(StaticTag, "Callback is called"); } });
      
      





Java ラムダ式は、 JDK 8の一部として2014年に導入されましたが、残念ながら、Android SDKはJDKバージョン7のみをサポートするため、Android開発者は使用できません( retrolambdaのようなライブラリがある理由です )。







現在、両方の言語がこのアプローチを完全にサポートしています。Swiftでは「クロージャ」(Objective-Cのブロックと同じ)で、KotlinはAndroid SDKで機能する「ラムダ」をサポートしています。







迅速な閉鎖の例:







 { _ in print("Closure is called!") }
      
      





Kotlin lambdaの例:







 { println("lambda is called!") }
      
      





2011年頃のXcode 4以降、 Objective-Cは配列と辞書の1行の初期化を提供します。







Swiftの初期化の例:







 let numbersArray = [2, 4, 1] let dictionary = ["key1": "value1", "key2": "value2"
      
      





JDKでは、静的な初期化のみが利用可能ですが、Mapを1行で初期化する方法はありません。 これを可能にするMap.of関数は、 JDK 9でのみ導入されました。







Javaでの静的初期化の例:







 // Array private static final int[] numbersArray = new int[] {2, 4, 1}; // Map private static final Map<String, String> map; static { map = new HashMap<String, String>(); map.put("key1", "value1"); map.put("key2", "value2"); }
      
      





しかし、 コトリンはこれを行うことができます:







 mapOf<String, String>("key1" to "value1", "key2" to "value2")
      
      





私が強調したいもう一つのことは、あなたの人生をずっと楽にする範囲演算子です。 これで、単純な回避策としてforループを使用する代わりに:







 for (int i = 0; i < N; i++) { // Do something }
      
      





Kotlinでは次のようにできます。







 for (i in 0..N-1) { // Do something }
      
      





または、 Swiftでこのように:







 for i in 0..<N { // Do Something }
      
      





タプルについても言及する価値があります。 他のコンポーネントとのやり取りにある程度の自由を与え、追加のクラスの作成を回避するのに役立ちます。







したがって、これらすべての新しい「機能」と、この記事で言及されていない他の多くのことを見てみましょう。新しい時代がすでに始まっていることをお勧めします。 これで、モバイル開発の旅を始めるすべての初心者は、これらすべての機能にすぐにアクセスでき、ビジネスロジックとアプリケーション管理の日常的な開発のコストを削減できるようになります。 そして、これは単純な作業を行うために数百行を書くよりもはるかに重要です。 もちろん、PromiseKit、ReactiveCocoa、RxJavaなどの追加ライブラリをインストールして構成する前に、 しかし、これらのパラダイムと原則が利用可能になると、新しい開発者がそれらを使用するようになり、明るい未来につながると信じています。 :)







ご清聴ありがとうございました! 興味を持っていただけたか、少なくともこの投稿で新鮮なアイデアが得られたことを願っています。 私は簡単に書き込もうとしましたが、より具体的な例が必要な場合、および/または提案/コメントがある場合は、コメントに書いてください!








All Articles