Swiftに切り替える時ですか?

モバイル開発セグメントは、市場参加者に新しいツールを定期的に提供しています。 iOS向けのプログラミングにこのような新しいコンセプトをジェネリックとして使用するかどうか、およびSwiftに切り替える時期については、Avitoのモバイル開発のスペシャリストであるMaxim Sokolovと話しました。









-あなた自身とSwiftでの経験について簡単に教えてください。



-現在、私はAvitoでiOS用モバイルアプリケーションの開発者として働いています。 私は約5年間モバイル開発を行ってきましたが、それ以前はさまざまな分野、特にWebサイト、バックエンド、デスクトップアプリケーションに携わっていました。

6か月以上前、AvitoでSwiftの使用を開始しました。この言語の2番目のバージョンがリリースされたとき、開発者コミュニティからのフィードバックが蓄積されました。 作業の前半では、Objective-Cを使用しましたが、現在はすべての新しいコードをSwiftで記述しています。



-一部の開発者は、Swiftを非常に「生の」言語であり、これまでの大規模プロジェクトには適さないと言っています。 この意見を確認または拒否できますか?



-もちろん、Swiftには、特に開発環境に関連する欠点があります。 Xcodeが時々クラッシュするか、構文の強調表示がオフになるか、コンパイラがコードのコンパイルを拒否します。 上記の欠点は、Swiftでの大規模プロジェクトの開発を拒否する理由とは言えません。 問題に直面した-私たちは解決策を見つけました。 そして、すでにこの言語で書かれたかなり大きなプロジェクトを本番環境に送りました。



-これらの困難にもかかわらず、Swiftに切り替えるようになったきっかけは何ですか?



-まず、AppleはSwiftを開発中であり、今後も開発を続けることを理解していますが、Objective-Cは長い間重要な変更を受けていません(Swiftの互換性に関連する変更は考慮しません)。 現在Swiftに切り替えることは、ある程度将来への一歩です。

Avitoでは、実験として、Swiftをプロジェクトの1つに使用することにしました。 そして一般的に、彼らは乗り越えられない困難に遭遇しませんでした。 すべてが判明し始めました。 コードはObjective-Cよりも読み書きが簡単です。 そして最も重要なことは、ジェネリックの使用を含めて、タイプされて安全であることです。



-ところで、ジェネリックはSwiftへの切り替えを支持して、引数の1つと呼ぶことができますか?



-一般に、はい。

しかし、ここではビジネスタスクに依存しすぎています。 まず、Swiftの豊富な経験を持つ開発者は多くありません。 第二に、Objective-Cで以前に記述された多くのプロジェクトがサポートされる必要があります。 そして、Swiftでうまく書くためには、それを勉強し、それにリソースを費やす必要があります。 そして、これらの要因はビジネスにとって非常に重要です。 したがって、ジェネリック-これは、Swiftへの移行を引き起こす明確な引数ではありません。 これは便利なツールです。



-仕事でジェネリックをどの程度積極的に使用する必要がありますか?また、このコンセプトの主な利点は何ですか?



-ジェネリックを非常に積極的に使用しています。 この概念は、高品質で、強く型付けされた、予測可能なコードを書くのに役立ちます。 私たちの変化が何に影響するかを見て、これは私たちにとって重要です。 1つのチームで複数のプロジェクトを一度に作成し、多くの再利用可能なコンポーネントがあります。 もちろん、バージョニングを監視しますが、コンポーネントに次の変更が加えられたときに、それらが何に影響するかを知りたいです。 ジェネリックを使用する場合、動的な型キャストはありません。 モデルの一部、モデルの要件、プロトコルが変更されていることがわかります。 そして、起こりうるタイピングの問題は、エラーの形ですぐに現れます。 とても便利です。

したがって、この概念がさまざまな分野に適用できることを考えると、ジェネリックはどこでも使用されます。ネットワーク、データモデル、さらにはUIを使用する場合です。



-ジェネリックの概念は新しいものではありません。 昔、アナログは他の言語で登場し、一般化されたプログラミングの考え方は何十年もの間存在していました。 あなたの意見では、開発者が常に(可能な場合)常に彼らに頼るわけではないのはなぜですか?



-実際、何十年もの間、さまざまな形式のジェネリックが多くのプログラミング言語に存在していました。 そして、はい、開発者は常に彼らに頼るわけではありません。

Swift言語のコンテキストでは、基本的にジェネリックなしで行うことができます:Swiftで書くことができ、ジェネリックを使用するのは、そのような構成が何年も存在しないObjective-Cを使用した場合だけであり、現在はSwiftで古い経験を投影しようとしています。 私の意見では、これが主な理由です-自分用の新しいテクノロジー(Objective-Cにはありませんでした)を見るときは、慎重にアプローチします。 ただし、それに飛び込むと、コードを書くのがはるかに簡単になります。 そして、コード自体はずっと良くなります。



-あなたの意見では、どのタスクのためにジェネリックを使用するのが最善ですか(特にSwiftのフレームワークで)?



-そのようなタスクはたくさんあります。 ジェネリックは、さまざまな種類のデータを操作することで再利用できる特定のアルゴリズムがある場合に役立ちます。 明らかな例は、1つのアルゴリズムを使用して(コードをコピーするだけで)実数と整数をソートすることです。

特に興味深い例があります。特に、iOSでネットワークまたはテーブルを操作します。 しかし、視覚的な図と具体的なコード例がなければ、そのようなタスクを分解することは非常に困難です。 メビウスに関する私のプレゼンテーションの一環として、これらの例を分析します。 そのような構造が非常に効果的に使用される場所と、コードの量を大幅に削減できる場所について説明します。

私の意見では、最も興味深いケースは、UITableViewテーブルを操作するためのコントロールです。 テーブルを使用する場合は、型キャストを行う必要がありますが、レポートではジェネリックの助けを借りてこれがどのように機能するかを示します。 さらに、このコンテキストでは、ジェネリックはコードの量を大幅に削減するのに役立ちます。



-ジェネリックの積極的な使用は、アプリケーションの問題(セキュリティなど)を引き起こしますか?



-このような問題は発生していません。

どのような困難がありますか? ジェネリックを使用して、アーキテクチャを慎重に検討し、ジェネリックの使用が正当化される場所とそうでない場所を決定する必要があります。 メリットがない場合は、このテクノロジーを使用しないでください。 しかし、これは特にジェネリック医薬品の問題ではありません。 これはどのテクノロジーにも当てはまります。



-ジェネリック医薬品の不適切な使用に遭遇しましたか?



-たとえば、関数が1種類のデータのみで機能し、汎用としてスタイル設定されている場合、これはコードをやや複雑にし、混乱させます。

しかし、ほとんどの場合、逆の可能性が高くなりました。ジェネリックを使用せずにコードを記述し、ここでジェネリックを使用するのが本当にクールであることに気付きました。



-Swiftでのジェネリックの使用に制限はありますか?



-私がObjective-CとSwiftの互換性と呼ぶ主な制限:Swiftで書かれた汎用コードはObjective-Cでは使用できません。






会話ありがとうございました!



上記のように、Maxim Sokolovは、Swift言語の開発者(つまりジェネリック)が提案するツールを使用して、Mobius会議でのプレゼンテーションの一環として、より予測可能で安全なコードを構築することの有効性に関する実用的な質問を提起します。 このイベントは6月4日にサンクトペテルブルクで開催されます。



All Articles