(Photo by:SOZIALHELDEN)
スマートフォンアプリの開発言語にはなにを使っていますか?
現在のアプリ開発言語には、Objective-CやJava、JavaScript、C#などさまざまな言語があります。
そして、「Swift」もその中のひとつです。iOSアプリ開発者は今、古臭いObjective-Cを捨て、モダンなSwiftに移行しつつあります。これは、TIOBE Programming Community Indexからも明らかです。Swiftは2015年12月にはオープンソース化され、さらなる広まりを見せています。
「Androidアプリしか開発しないから使わないよ」という方でも、学習しておく価値はあるかもしれません。なぜなら、グーグルはオラクルとのJava API訴訟問題を解決するために、Androidアプリ開発をJava以外の言語に移行しようと考えているからです。そして、その移行先にSwiftを検討していると一部報道で報じられています。もし、移行が現実のものとなったときのために、今から準備しておくのも悪くはないでしょう。
この記事では、
- iOSアプリ・Androidアプリを開発しているエンジニアの方
- iOSアプリ開発に興味があるエンジニアの方
のために、Swiftの概要と特徴的な要素を、コード例を挙げて紹介していきます。Macを持っていない方でも試せる方法を紹介していますので、WindowsやLinux使いの方でも大丈夫ですよ。ぜひこの機会に、先進的なSwiftにふれてみましょう。
Swiftはどんな言語?
公式サイト:http://www.apple.com/jp/swift/
GitHubリポジトリ:https://github.com/apple/swift
Swift(スウィフト)は、Appleが開発したiOSアプリやMacソフトを開発するためのプログラミング言語です。2014年6月に登場したばかりなので、他の言語からさまざまな機能を取り込み、モダンな仕様に仕上がっています。現在は、バージョン3.0のリリースに向けて開発が進行中です。2016年の後半(秋ごろ)にはリリースされるでしょう。
オープンソースのコンパイラ基板であるLLVMが使われているためか、コンパイルエラー時に非常にわかりやすいメッセージを出力してくれます。「そこまでわかっているなら自動的に直してくれよ」と思うこともしばしば。Swiftは初心者にも優しい言語だといえるでしょう。
Macを持っていないならブラウザで試そう
iOSアプリ開発の一番の残念ポイントは、Windowsに対応していないことです。基本的にMacがないとアプリ開発ができません(とはいえ、いくつか方法はあります)。Swiftも公式実装はWindowsに対応していないため、他の手段を探す必要がありそうです。ここでは、誰でも手軽に試せる方法として、IBMのREPLサービスを紹介します。
IBM Swift Sandbox:https://swiftlang.ng.bluemix.net/#/repl
これならブラウザさえあれば、手軽にSwiftを試せます。アプリ開発はできませんが、学習目的であればこれで十分でしょう。もちろん、Macの方はXcodeでOKです。
Swiftの特徴的な要素
型推論
Swiftは静的型付け言語ですが、型推論があるため、型を明示的に指定しなくてもコンパイラが推定してくれます。たとえば、変数宣言は次のようなコードになります。
var number = 1234 // Int型 var varsion = 1.1 // Double型 var str = "hogehoge" // String型
もし、明示的に型を指定するなら次のような構文になります。
var isTrue: Bool = true
どちらにしても静的に型付けされているため、次のように違う型の値を代入するとコンパイルエラーになります。
var number = 1234; number = "1234" // cannot assign value of type 'String' to type 'Int'
なお、「var」ではなく「let」で宣言すると、定数となり代入できなくなります。
タプル
タプルは、複数の値の組み合わせです。クラスや構造体を作るまでもない、簡単なデータの受け渡しに便利です。言語に組み込まれているため、次のようにリテラルとして作成できます。
let notFound = (404, "Not Found")
アクセスするには、次のように変数(もしくは定数)に割り当てます。
let (code, message) = notFound
最初からタプルの要素に名前をつけておくことで、その名前でアクセスすることもできます。
let notFound = (code: 404, message: "Not Found") print(notFound.code) print(notFound.message)
なお、タプルもしっかりと型付けされているため、型の並びや値の個数が違うとコンパイルエラーになります。
オプショナル型
nullの考案者が「10億ドルに相当する過ちだった」と断じているように、nullは非常にやっかいな存在です。そのため、Swiftではデフォルトでnull(nil)を代入できなくなっています。一見うまくいきそうな次のコードはコンパイルエラーになります。
var str = "hogehoge" // String型に型推論される str = nil // nil cannot be assigned to type 'String'
Swiftでnilを代入したいときは、オプショナル型を使わなければいけません。オプショナル型にするには、型名の後に”?”をつければOKです。
var str: String? = "hogehoge" str = nil // OK!
オプショナル型の値はラップされているため、値にアクセスするには次のように”!”をつける必要があります。なお、値がnilの場合に使用すると実行時エラーになります。このため、if文などでnilでないか確認しなければいけません。
var str: String? = "hogehoge" if str != nil { print(str!) }
関数から複数の値を返す
関数(メソッド)から複数の値を返したいけど、クラスを増やしたくないようなこともあります。Swiftでは、タプルを使うことで関数から複数の値を返すことができます。それには、次のように関数定義の返り値の型にタプル型を指定します。
func Measure() -> (width: Int, height: Int) { return (100, 200) } let size = Measure() print(size.width) print(size.height)
上述のタプルと同様に扱えるため、簡単なデータならわざわざクラスを作る必要はありませんね。任意の名前をつけられるところがポイントです。
ローカル・外部パラメータ名
Swiftでは、関数宣言のパラメータに、ローカルパラメータ名と外部パラメータ名という2つの概念があります。次のように、一般的な形で宣言するとローカルパラメータ名と外部パラメータ名に同じ名前が使われます。
func add(x: Int, y: Int) -> Int { return x + y }
ローカルパラメータは関数内部、外部パラメータは関数呼び出しで使われます。そして、外部パラメータ名は関数呼び出し時に省略することができません。
var result = add(x: 1, y: 2) // OK! result = add(1, 2) // missing argument labels 'x:y:' in call
省略する場合には、次のように明示的に記述しなければいけません。
func add(_ x: Int, _ y: Int) -> Int { return x + y } var result = add(1, 2) // OK!
ちょっと面倒な仕様ですが、たしかに関数呼び出しにもパラメータ名があったほうがわかりやすいですね。
さらに詳しく知りたいならドキュメントを読もう
Swiftにはわかりやすい公式ドキュメントが用意されています。iBooks版もありますので、iPadをお持ちの方はそちらのほうが読みやすいかもしれません。
「英語じゃねーか!」と思った方には、下記の日本語訳をおすすめします。公式ドキュメントをそのまま翻訳したものです。
日本語訳:http://www.studiogalago.com/the-swift-programming-language/
これなら学習がはかどりますね。
まとめ
Swiftの特徴がお分かりになりましたか?iOSアプリの開発環境が、Windows向けに公開されていないのが一番残念なところですが、エンジニアの方ならMacを持っている方が多いのではないでしょうか(え?持ってない?)。SwiftはiPhoneやiPadだけでなく、Apple WatchやApple TVの開発にも使えます。これを機に、本格的にはじめてみるのもよいでしょう。あなたはSwiftのどんなところが気になりますか?
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments