SwiftとObjectiveCを知る

主にiOS向けのアプリを開発するのに使用されるSwiftとObjectiveCですが、どちらもプログラミング言語として興味深い特徴を持っています。

将来性が期待されるSwiftと、いまだに根強い人気を誇るObjectiveC。それぞれの特徴を簡単に見てみましょう。

Swiftとは

主にiOS向けのネイティブアプリを開発するのに使用される言語がSwiftです。Apple社が開発したこのプログラミング言語は、名前に負けない処理速度の速さと使いやすさが特徴です。Swiftを動かすには、XCodeというApple社のソフトが必要です。そのため、Swiftは実質Appleユーザー向けのプログラミング言語ということになります。実は、Swiftが開発される以前は、長らくObjectiveCが使われてきました。

しかし、ObjectiveCは他のプログラミング言語に比べると難解で、学習コストもそれなりにかかることから、エンジニアには不評を買ってきた言語でした。それに代わるべく開発されたのがSwiftです。Swiftは、ObjectiveCに比べると、

  • コードが簡単で書きやすい
  • モダン。JavaScriptやPython、Rubyなどの現代プログラミング言語のいいとこどりで、学びやすい
  • ObjectiveCと(完全ではないながらも)互換性があり、混在させることも可能
  • コンパイル型言語で、実行速度が速い。同じコンパイル型のObjectiveCと比べても速い(Objective-Cよりも最大で2.6倍、Python 2.7よりも最大で8.4倍のスピード)。つまり、より軽量に動作するアプリが作れる
  • 「Playground」機能を搭載し、プログラミング中でも動作確認が可能。修正箇所をリアルタイムで確認しながら開発できる

このように、SwiftはiOS用のアプリを開発するにはうってつけのプログラミング言語ですが、強いて言えばそれがデメリットとなります。JavaScriptやRubyのようにマルチな使い方ができる言語ではないため、Swiftのみを扱うエンジニアは汎用性がなくなります。加えて、SwiftはいまだにABI(互換性に関する規約やインターフェイス)が安定せず、下位互換性を切り捨てるアップデートが続けられてきました。そのため、旧言語であるはずのObjectiveCからの移行に踏み切れない開発者も少なくありません。しかし、総合的に見ると、SwiftはiOS向けのアプリ開発に欠かせない言語です。

ObjectiveCとは

前述のように、ObjectiveCは、Swiftが開発されるまでiOS向けのアプリ開発に主力として使用されていたプログラミング言語です。しかし、Swiftに互換性があることから、現在でも開発にある程度使用されています。ObjectiveCを使いこなすには、C言語とオブジェクト指向プログラミングについての深い知識が必要とされるため、独特の記述法は物議をかもしてきたものの(関数の定義や呼び出し方が異なる等)、熟練のプログラマーにはそれだけ習得しがいのある言語です。

しかし、残念ながらObjectiveCの今後の需要は減っていくと見られています。前述のSwiftの登場により、より簡単で書きやすい他の言語という選択肢があるからです。しかし、今後減っていく需要に伴い、エンジニアの数も減っていくため、扱える人口も少なくなっていきます。そういった需要を拾うことはできるため、現在ObjectiveCを扱う方や、以前に扱った経験のある方は、いざという時のスキルとして役立ってくれるでしょう。ObjectiveCと比べて、Swiftの方が読みにくいというエンジニアや、いまだにコンパイルできないといった意見も散見されますが、世界的に見てSwiftが強くなっていっているのは明らかです。

SwiftとObjectiveCの違い

セミコロン「;」がなくても改行できるSwiftでは、ObjectiveCのようにセミコロンを行末に入れなくても動作します。コンパイラが自動で改行を認識してくれるからです。複数行に渡る文は改行がないことも判断します。もちろん、for文などセミコロンを必要とする文を書く際は必要です。

・Optionail Typeの利便性Swiftでは、変数の値に仮挿入する空データ「nil」を代入できません。これを代入するにはOptional Typeを使う必要があります。ObjectiveCでは、nilを代入する場合はJavaScriptのように複雑な文を書く必要がなく、エラーが発生せずに簡単に受け取れます。

しかし、これによりObjectiveCで書いたプログラムは潜在的なリスクを抱えることになり、何らかの条件が発生した時に初めてエラーとなります。つまり、

(ObjectiveCはアプリが製品化してからエラーが発生)
(JavaScriptはプログラム実行時にエラーが発生)
(Swiftはプログラミング時にエラーを発見)

となります。ひと手間かかるため一見面倒な仕様ですが、エラー発生のリスクを抑えるのに優れた機能です。