Appleソフトウェアのためだけじゃない言語へ
Swiftがオープンソース化してその使用目的の裾野が広がる動きに合わせて、AppleはSwiftをXcode無しでも使えるようにしていたみたいです。ただあまり需要がまだ無いせいかあまりこのことについて言及している記事が少ないので公式のドキュメントをひも解きながらやっていきたいと思います。
参考: Swift.org
インストール
Swiftオープンソース化ということでもちろんのことマルチプラットフォーム化しています。
OS X
これに関してはもちろん元からインストールされているのでターミナルから使えるようにするだけでいいです。
$ export PATH=/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:"${PATH}"
もちろん.bashrcや.zshrcに書くのが手っ取り早いでしょう。
Linux
clangに付いているみたいです。
$ sudo apt-get install clang
$ export PATH=/path/to/Swift/usr/bin:"${PATH}"
REPLを起動
使い方は簡単です。
$ swift
Welcome to Apple Swift version 2.2. Type :help for assistance.
1>
このようにswiftとうつことで起動されます。:helpでヘルプが見れますし終了したいときは:qで終了できます。ここらへんはHaskellのghciに似ていますね。
実際に使ってみよう
それでは実際に使ってみましょう。ドキュメントに沿ってやっていきます。
1> 1 + 2
$R0: Int = 3
2> let greeting = "Hello!"
greeting: String = "Hello!"
3> print(greeting)
Hello!
このように扱うことができます。で、この出力フォーマットもしやと思いやってみたら案の定でした。
4> print($R0)
3
ここらへんは実際にXcodeとかでコード書く時と同じなんですね。
エラーメッセージはこんな感じででます。
5> let answer = "forty"-"two"
repl.swift:5:21: error: binary operator '-' cannot be applied to two 'String' operands
let answer = "forty"-"two"
~~~~~~~^~~~~~
5>
またこのXcodeと同じようにTabでサジェストする機能もあるらしいです。
5> "Hi!".re
Available completions:
removeAll() -> Void
removeAll(keepCapacity: Bool) -> Void
removeAtIndex(i: Index) -> Character
removeRange(subRange: Range<Index>) -> Void
replaceRange(subRange: Range<Index>, with: C) -> Void
replaceRange(subRange: Range<Index>, with: String) -> Void
reserveCapacity(n: Int) -> Void
5>
また複数行での入力にも対応しています。しかも自動インデントしてくれるみたいです。
5> let numbers = [1,2,3]
numbers: [Int] = 3 values {
[0] = 1
[1] = 2
[2] = 3
}
6> for n in numbers.reverse() {
7. print(n)
8. }
3
2
1
またライブラリをimportして使うことも出来るみたいです。import自体は
9> import Darwin
10> arc4random_uniform(10)
$R1: UInt32 = 2
11>
というようにできます。ちなみにこのDarwinというのはOS XだけでLinuxはGlibcというのがかわりに使えるみたいです。
最後に
以上です。これによって簡単な処理をSwiftとかでやりたい時はPlaygroundとか起動するよりももっと手軽かつ便利に扱えるようですね。
ちなみに今回見ていたドキュメントには他にもSwiftコードを手動でビルドする方法とかコマンドラインからデバッグをする方法とかも書いてあります。そこで気付いたんですがlldbってどっかで聞いたことある単語だなと思ったらC言語のデバッグツールでしたね。
全然見た目違うけどSwiftはCベースの言語なんだなと感じました。