『Swift』のメリット・デメリットを徹底解説!プログラミング言語としての特徴から気になる評判までご紹介します!
SwiftがWWDC(Worldwide Developers Conference)で発表されてからはや5年が立ちました。Swiftは「モダン・安全・高速・表現力豊か」というコンセプトの言語として発表されましたが、実際のところどういった特徴があるの?Objective-Cとどう違うの?と思われる方も多いです。本記事でメリット・デメリットを抑えてしっかりとSwiftの特徴を理解しましょう!
目次
Swiftのコンセプト モダン
モダンとは「現代的」という意味ですが、プログラミング言語におけるモダンとは流行りの書き方や新しく普及された機能などを主として指しています(ちなみにモダンの対義語はレガシーです)。
それではSwiftのどこがモダンかというと、公式サイトにて6つの事例が挙げられています。
・Variables are always initialized before use.
・Array indices are checked for out-of-bounds errors.
・Integers are checked for overflow.
・Optionals ensure that nil values are handled explicitly.
・Memory is managed automatically.
・Error handling allows controlled recovery from unexpected failures.
これらを和訳すると以下のように書き換えられます。
・変数は使用する前に常に初期化する
・配列インデックスは範囲外エラーもチェックする
・整数のオーバーフローをチェックする
・Optional型を使用することでnilを明示的に扱える
・メモリは自動的に管理される
・予期しない障害でもエラー処理の制御により回復できる
ここで注目したいのはOptional型のnilについてです。Objective-Cにおけるnilと扱いは似ていますが別物です。
Objective-Cで使用されるnilは「存在しないオブジェクトへのポインタ」ですが、Swiftでは「型に対する存在しない値」を意味します。Objective-Cでは参照したオブジェクトが存在しない場合に、nilが返り値として使用できますが、SwiftではIntやStringなどのすべての型に対してもnilを使用できます。
型に対してnilを使うメリットは明示的にnilを定義することで隠れたエラーを事前に気づくことができるということです。
安全
ここでの安全とは「誤って異なるメモリにアクセスすることは決してない」という意味です。
「クラッシュしない」という意味ではありません。具体的に何が対策されているのかというと型の誤りや未定義をコンパイル時に検出するので、予期せぬ型による実行時エラーが発生しません。
Optional型も安全性の向上として取り入れられています。
高速
Swiftは、C言語ベースで作られていたObjective-Cに代用できるよう設計されています。つまり、C言語と同等のパフォーマンスを発揮しなければなりません。
では実際に「Objective-Cと比較するとどちらが早いのか?」というと、それはプログラミングしたソースコードによります。
例えば構造体を使ったSwiftの場合は、C言語に近いスピードになりObjective-Cよりもかなり速くなると言われています。
表現力豊か
Swiftは楽しい言語として位置付けるために数々の工夫がなされており、例えば次のような機能です。
・Closures unified with function pointers
・Tuples and multiple return values
・Generics
・Fast and concise iteration over a range or collection
・Structs that support methods, extensions, and protocols
・Functional programming patterns, e.g., map and filter
・Powerful error handling built-in
・Advanced control flow with do, guard, defer, and repeat keywords
これらを和訳すると以下のように書き換えられます。
・クロージャは関数ポインタとして使用できる
・タプルの戻り値を複数に設定できる
・型を柔軟に読み取ってくれるジェネリックスがある
・rangeまたはcollectionに対して高速で簡潔にイタレーションされる
・メソッド、拡張機能、およびプロトコルをサポートする構造体がある
・関数型プログラミングとして使用できる
・強力なエラー処理機能がある
・do、guard、defer、repeatのような高度な制御フローが使える
ジェネリクスが使えるのはとても便利ですね。
\ IT転職のプロが無料でサポート! /
Swiftのメリット
処理が早い
Swiftは速さも売りにしており、Arrayの処理が特に速いとされています。
Appleの公式サイトの検証結果では深さ優先探索アルゴリズムを使って1つのグラフ内で10,000個の整数を検索した場合、Objective-Cの最大2.6倍、Pythonの最大8.4倍の速度が出ると発表しています。
C言語やObjective-Cと簡単に連携できる
SwiftからもC言語の関数をそのまま呼べますし、C言語で作った構造体もそのまま使えます。
更にポインタでさえ同じような操作感で使用できます。
Objective-Cのライブラリもimportするだけで使用することができますので全てではありませんが、Objective-Cの資産も流用できるケースが多いです。
メンテナンスしやすい
Swiftでは変数に何も入っていない状態を開発者が許可をせずに空の変数を利用した場合にはアプリが強制終了します。
強制終了はデメリットにも思えますがエラーが潜在的な状態になったままリリースされてしまったらそれは最悪の事態です。
その点を考慮するとアプリの異常を開発時点で確認できるのでメンテナンスが容易になります。
ちなみにObjective-Cでは変数が空でもアプリとしてはエラーが起こりません。
コンピュータの深い部分を制御できる
Swiftおよび適応されるハードウェアどちらもApple製のためインターフェースなどのハードウェアに近い部分も開発することができます。これはソフトウェアとハードウェアが同一のメーカーだからこそできる特徴です。
Swiftのデメリット
コンパイルが遅い
遅い原因の1つとして差分コンパイルがサポートされていないことがあります。また、コンパイラが自動的に型を推測するので情報を計算する時間がコンパイルする際に加算されることも遅い原因として考えられます。
対策として、コンパイルの過程を解析することで根本的な原因をつかめることがあります。
Macでしか開発できない
Androidの開発はOSに依存しませんが、SwiftでのiOS開発はMacでなければ開発できません。これはWindowsユーザやLinuxユーザに対して軽い気持ちで取り掛かるには障害になるポイントです。
どうしてもMac以外からiOS開発がしたいという方は、クロスプラットフォーム(Xamarin,Cordova など)から開発することができます。
Swiftの起動用のライブラリが巨大
App Storeに向けたビルドとして出力すると、iPhoneアプリでは100MB、Apple Watchアプリでは36MBほどライブラリのための容量を必要とします。
最終的にアプリ上に公開した際には削られるのでご安心ください。
SwiftとObjective-C
ここまでにSwiftのコンセプト、特徴、メリット・デメリットを紹介しましたがある程度理解して頂けたでしょうか?
ここからはSwiftとObective-Cと比較してどちらの言語のどの部分が優れているのかを比較していきます。
Swiftのほうが優れている点
1.可読性が高く学習コストが低い
2.コードの書き方がシンプルになったため、
コーディング量が減る
3.Webのフレームワークが充実
4.ステートメントの終わりはセミコロンが不要
Objective-Cは独自性の高い書き方で他の言語と比較しても読みにくく、さらにコーディング量も増えるという問題がありますが、Swiftはシンプルな記法です。
また、Swiftはスマホアプリ専用の言語に思われがちですが、他にもMacアプリ、watchOSアプリ、tvOSアプリ、Webアプリも作成できます。Objective-CでもWebアプリを作ろうと思えば出来ますが、用意されているフレームワークの数は圧倒的にSwiftのほうが多いです。
パフォーマンスが良いSwiftはサーバサイドとしても、今後普及される可能性も十分にあります。
Objective-Cが優れている点
1.記法ががらりと変わることはない
2.技術情報が多い
3.コンパイル時間が短い
4.Objective-Cの資産(マクロやライブラリ)がたくさんある
Objective-Cはなんといっても歴史も長いですし、言語を習得している人もSwiftより多いためたくさんのドキュメント・ライブラリなどの資産も豊富に残されています。
Objective-Cを使用することは多数の資産の恩恵を受けスムーズに開発を進められます。
評判
続いてSwiftの評判を紹介します。
ポジティブな評判
多くの意見がありましたが、ここではTwitterから3つの評判を抜粋します。
[Twitter引用➀]
iOSアプリって右肩上がりのジャンルなのに
なんでSwiftを勉強する人が少ないのかなぁって
いつも疑問に思ってます。スマホユーザーの
利用時間83%はネイティブアプリです。
多分まだエンジニアが希少で単価が高いから
あんまり流行ってないだけでこれから
Web系言語くらい求人が増えると予想してます。
引用元:https://twitter.com/taikick_shiba/status/1093760366520070145
[Twitter引用②]
swiftは簡単にfunc in funcが書けるので状態を
持った再起も割と綺麗に書けるなと、ふと気が付きました
[Twitter引用③]
Swiftを極めるとwebアプリも作れる。
PHPやRuby、PythonはiOSアプリは
作れないがSwiftは簡単に作れる。
恐ろしいのはこれを作っている過程で
API作成も同時進行出来ること。
引用元:https://twitter.com/CIUThl0vX0UN4sF/status/1087511386366697472
もちろん他にもポジティブな評判の記載がありましたが、その中でも特に多く散見された「これから人気が出るかもしれない」「書きやすい言語」「汎用性がある」の3つに関する評判を取り上げさせて頂きました。
ネガティブな評判
こちらも多くの意見がありましたが、ここではTwitterから4つの評判を抜粋します。
[Twitter引用①]
なんでiOSアプリエンジニアが少ないのかなって考えるとやっぱりドキュメントがほぼ英語なのが原因なんでしょうか…Xcodeも全部英語。あんまりweb上に日本語でSwiftの情報落っこちてないんですよね。
その代わり英語で検索出来ればめちゃくちゃ捗る。
引用元:https://twitter.com/taikick_shiba/status/1093758217434279937
[Twitter引用②]
iPhone向けの最新の開発用言語はswiftだといわれるけど、
これ毎年の様に仕様が変わっているらしい。
たった半年前のサンプルコードがそのまま使えないって・・orz
ついてゆくのが大変そうだ
引用元:https://twitter.com/ComputerRenju/status/932941833335746561
[Twitter引用③]
macOSアプリ開発向けのSwift情報が少なくてつらいという話、よく分かる……。ググってとりえずiOSの情報は出てくるけどそれをそのままmacOS向けには使えないケースがよくあるのよね
[Twitter引用④]
Swift の struct はいい感じではあるのだけど、KVO 対応できない時点で Mac App の開発にはあまり使えない。
ネガティブな意見も数多くありますが、その中で多数散見した内容ですと「ドキュメントが少ない」、「仕様変更が多い」、「Objective-Cにあった機能でSwiftで対応していない」など主に新しい言語が故に抱える課題が数多くありました。
最後に~結局Swift、Obective-Cどっちがいいの?~
これからiOS開発を学習されるのであればSwiftのほうが圧倒的メリットがあると考えられます。
なぜならSwiftは学習コストやコーディング量、そして一番重要な「楽しさ」までも追及しています。パフォーマンスもObjective-Cに劣らず速いです。
また、仮にどちらの言語から学習を始めても基本的な概念は同じなので、もう一方の言語を習得するのもそこまで時間はかからないでしょう。
まとめ
Swiftの特徴はいかがでしたでしょうか。まだまだ新しい言語であるため、今後の活発な動向に注目です。
また、2019年ではiOS開発ではObjective-CとSwiftのどちらもiOSの開発言語として使えますのでメリット・デメリットを抑えてしっかり検討しましょう。
\ IT転職のプロが無料でサポート! /
あわせて読みたい関連記事
この記事を読んでいる人におすすめの記事