連載
» 2016年03月01日 05時00分 UPDATE

Dev Basics/Keyword:Swift(プログラミング言語)

Swiftは「開発者が正しいプログラムを記述/保守管理するのが簡単に行えるように」設計された、安全で高速、記述性が高い言語だ。

[かわさきしんじ,Insider.NET編集部]
Dev Basics/Keyword
Insider.NET

 

「Dev Basics/Keyword」のインデックス

連載目次

 Swiftはアップルがオープンソースとして公開/開発しているプログラミング言語だ。アップルが提供する各種OS(iOS、OS Xなど)をターゲットとしてアプリ開発を行えるが、オープンソース化に伴いLinux上でもSwiftコンパイラ/標準ライブラリ/コアライブラリ/デバッガ/REPL環境が動作するようになっている。

Swiftの特徴

 Swiftは「開発者が正しいプログラムを記述/保守管理するのが簡単になるように」設計された安全高速記述性が高い言語だ。

 例えば、SwiftではLLVMコンパイラを使用することで、Swiftコードを最適化されたネイティブコードへコンパイルすることを可能にしている。

 安全性を高めるための特徴/機能としては、ARC(Automatic Reference Counting: 自動参照カウント)を利用したメモリの自動管理、整数や配列のオーバーフローの自動チェックなどがある。この他にも、型推測、クロージャ、ジェネリクス、プロトタイプ指向など、モダンなプログラミング言語としての特徴を提供している。

 以前はアップルが提供するOS向けのアプリはC/Objective-Cを用いて開発されていたが、Swiftはこれらの言語の後継となる言語であり、それらとの相互運用が可能となっている。

Webで提供されているSwiftのREPL環境

 Web上にはSwiftのREPL環境(サーバサイドプログラミングを試してみるためのサンドボックス環境)が提供されている。Swiftがどんな言語か興味のある方はこれを使ってみるとよい。

IBM Swift Sandbox IBM Swift Sandbox
右側の出力の一番上を見ると分かる通り、このREPL環境はLinux上で動作しているものだ。

 画像には「Hello World」プログラムが表示されている。これを見ると分かるが、Swiftでは行末にセミコロンを付加する必要がない。では、このREPL環境を使って、Swiftコードを幾つか実際に見ていこう。まずは整数型のオーバーフローチェックを見てみる(ここでは例としてInt16型=16bit符号付き整数型を使う)。

var num: Int16 = 32767
num = 32768
print(num)


16bit符号付き整数型に範囲外の値を代入

 変数の型は上のコードを見ると分かる通り「変数名: 型」のように指定する。これを実行してみると次のような画面になる。

コンパイル時にオーバーフローチェックが行われエラーとなった コンパイル時にオーバーフローチェックが行われエラーとなった
コードを実行するには画面最下部中央にある[Execute]ボタンをクリックする。

 このようにSwiftでは整数値に対してオーバーフローのチェックが行われる(この辺はC#でも同様だ)。もちろん、変数の型を指定しなければ型推測が行われる。型はdynamictType式で得られる。

var num = 32768
print(num.dynamicType)

// 実行結果
Int


dynamicType式による型名の取得

 Swiftでは変数はvarキーワードを使って、定数はletキーワードを使って定義する。以下は定数の使用例だ。

let str = "hello world"
str = "goodbye world"  // エラーとなる
print(str)


定数への値の再代入は認められない

 次にSwiftでの関数の定義を見てみよう。

func foo(firstName: String, lastName: String) -> String {
  return firstName + " " + lastName
}

print(foo("Insider", lastName:".NET"))

// 実行結果
Insider .NET


Swiftでの関数定義と関数呼び出し

 Swiftでは戻り値の型はパラメーター指定の後に「-> 型」の形で指定する(戻り値がなければ「-> Void」とするか、戻り値の型を指定しない)。

 foo関数の呼び出しに注意してほしい。上のように関数を定義した場合、関数呼び出し時には第2引数以降の実引数は対応するパラメーターを明示的に指定する必要がある(これらの名前のことを「外部引数名」と呼ぶ)。第1引数については外部引数名は指定しない。

 さらに内部引数名や外部引数名を指定したくない場合の記述方法もある。これらを使った場合の例を以下に示す(詳細は省略)。

// firstとlastが内部引数名
func foo(firstName first: String, lastName last: String) -> String {
  return first + " " + last
}

// 外部引数名の指定を省略するには「_」を外部引数名とする
func bar(first: String, _ last: String) -> String {
  return first + " " + last
}

// 内部引数名を指定した場合は、第1引数でも外部引数名の指定が必要
print(foo(firstName:"Insider", lastName:".NET"))

// 第2引数で外部引数名を省略した関数呼び出し
print(bar("Insider", ".NET"))


内部引数名/外部引数名の省略

 Swiftの特徴的な面を挙げているだけでも本稿ではスペースが到底足りないので、本稿の最後にIBMによるSwiftのクラウド化について簡単に触れておこう。

Swiftがクラウド対応することの意味

 2016年2月22日には、IBMによりSwiftとその実行環境をクラウドベースで提供することが発表された

 これを実現するために、IBMは同社のクラウドプラットフォームであるBluemix上でSwiftランタイムを提供する。加えて、OX XおよびLinux上で動作するオープンソースなWebサーバ「Kitura」、Swift用の各種パッケージのリポジトリとなる「IBM Swift Package Catalog BETA」(2016年2月29日時点でβ版)も提供している。上で使用したSwiftのREPL環境もこうした動きの中で提供されたものだ。

 Swiftのクラウド化は、iOSデバイスなどのクライアント向けアプリの開発に加えてクラウド上でのサービス開発についてもSwiftが使えるようになることを意味している(もちろん、各種のライブラリ/フレームワークを使えば、サーバサイドプログラミングをSwiftで行うことは可能ではあったが、それがクラウドベースで容易に行えるようになる)。

 .NET開発者であれば「サーバサイドもクライアントサイドもC#で」というのは自然なことだったが、これと同様な流れがSwiftでも生まれつつあるということだ。


 Swiftは安全で高速、記述性が高いプログラミング言語だ。クライアントサイドではiOS/OS Xをプラットフォームとするアプリ開発がその主なターゲットとなるが、クラウドへの展開が発表されたことで、今後はWebプラットフォームに関しても大きな選択肢の一つとなるかもしれない。

参考資料


「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。