書いて覚えるSwift入門

第0回 One More Thing for Developers

この記事を読むのに必要な時間:およそ 4 分

Introducing Swift

WWDC2014でOne More Thingとして発表された新プログラミング言語Swift。本連載に間に合うかどうかやきもきしていたのですが,2013年10月19日,Xcode 6.1からBetaが取れてぎりぎり間に合いました注1・図1)。

図1 Swiftリリース紹介ページ

図1 Swiftリリース紹介ページ

どんな言語でしょうか。Apple は[Introducing Swift]でこう紹介しています。

Swift is an innovative new programming language for Cocoa and Cocoa Touch. Writing code is interactive and fun, the syntax is concise yet expressive, and apps run lightning-fast. Swift is ready for your next iOS and OS X project―or for addition into your current app―because Swift code works side-by-side with Objective-C.

弾訳
「SwiftはCocoaおよびCocoa Touch用の革新的新言語です。コードを書くのはインタラクティブで楽しく,文法は簡潔ながら表現力が高く,アプリは超高速で動きます。SwiftはiOSおよびOS Xでいますぐ利用可能で,Objective-Cと並存可能なので,既存のアプリへの追加もできます」

この口上だけ見ると,SwiftはiOS/OS Xアプリ開発専用に見えますが,専用にしておくにはもったいないほどよくできた言語で,学べば学ぶほど汎用向けの言語であることが明らかになってきます。Swiftをオープンソース化するつもりがあるかを,Appleはつまびらかにしていませんが,同社のオープンソース戦略,とくにLLVM(Low Level Virtual Machine)へのコミットメントを考えるとその可能性は低くないと筆者は考えています。

本連載では,Swiftを汎用言語として扱います。よってiOS/OS X固有な点は極力排除し,言語そのものにフォーカスします。JavaScriptで言えば,WebブラウザだけでなくNode.jsでも動くように書く,といったところでしょうか。

注1)
この連載は,Software Design 2014年12月号に掲載されたものです。

Shut the F?ck up and Write Some Code!

読者の皆さんは,新言語を学ぶときどうされているでしょうか? 仕様書を徹頭徹尾読む? それもいいでしょう。実際Apple自身がバイブルに相当するThe Swift Programming LanguageをiBooksで無料公開しています。

しかし処理系であるXcodeも,Mac App Storeで無料公開されているのです。つまりMacさえ持っていれば,追加費用は一切かからないということ。Apple自身,インタラクティブであることをSwiftの売りにしているのです。これは書かずにいられませんよね。

とりあえずFizzBuzz

というわけで,何か書いてみましょう。何を書くのがいいか。FizzBuzzとか。

本誌の読者であれば,FizzBuzzが何かはご存じだと思いますが,念のため紹介しておくと,1から100までの数字を見て,3で割り切れればFizz”,5で割り切れればBuzz”,両方で割り切ればFizzBuzz”,それ以外なら数字そのものを出力するという簡単なプログラムです。とりあえずこの説明のまま書き下してみましょうかリスト1)。

リスト1 とりあえずFizzBuzz”

for n in 1...100 {
    if n % 15 == 0 {
        println("FizzBuzz")
    } else if n % 5 == 0 {
        println("Buzz")
    } else if n % 3 == 0 {
        println("Fizz")
    } else {
        println(n)
    }
}

このコード片を,そのままplaygroundに打ち込んでみましょう図2)。

図2 playgroundにリスト1を入力!

図2 playgroundにリスト1を入力!

たしかに仕様どおりに動いているようです。

ここで,まったく同じことを,Javaでやってみましょう(①~③)。

  • リスト2の内容のFizzBuzz.javaを作成する
  • ② javac Fizzbuzz.javaコンパイルする
  • ③ java FizzBuzzで実行する

リスト2 FizzBuzz.java

public class FizzBuzz {
    public static void main(String[] args) {
        for (int i=1; i<=100; i++) {
           if (i % 15 == 0) {
                System.out.println("FizzBuzz");
            } else if (i % 3 == 0) {
                System.out.println("Fizz");
            } else if (i % 5 == 0) {
                System.out.println("Buzz");
            } else {
                System.out.println(i);
            }
        }
    }
}

同じことをするのにも,ずいぶんと「おまじない」が多いことに気づきます。プログラム本体は,public Class FizzBuzzpublic static void main(String[] args)でくるまなければならないですし,ファイル名もFizzBuzz.javaでなければならないですし,さらにjavacでコンパイルしてjavaで実行しなければなりません。コードの部分はほとんど同じなのに,やらなければならないことのいかに多いことか。

「簡単なことは簡単に。難しいこともそれなりに」とは,プログラミング言語Perlの父,Larry Wallの言葉ですが,Swiftもまた「簡単なことは簡単に」書けるプログラミング言語であるようです。

MVCは分けましょう

しかし手練れのプログラマであれば,モデルとビューが渾然一体となった上記のようなプログラムはクソコードに感じられるのではないでしょうか。数字をFizzBuzz化する部分とFizzBuzzを出力する部分は分けたいはずです。

そうするにはどうしたらよいでしょう。そう。関数ですねリスト3)。

リスト3 SwiftでFizzBuzz(関数定義)

func fizzbuzz(n:Int) -> String {
    if n % 15 == 0 { return "FizzBuzz" }
    if n % 5 == 0 { return "Buzz" }
    if n % 3 == 0 { return "Fizz" }
    return String(n)
}
for n in 1...100 {
    println(fizzbuzz(n))
}

Swiftもほかのプログラミング言語同様,関数を定義することができます。宣言はfunc。PerlのsubやRubyのdefより1文字多いですが,JavaScriptのfunctionの半分。ただし型は宣言しなければなりません。引数は数値のInt。戻り値は文字列のString。そう。SwiftはCやC++やJava同様,静的なコンパイル言語なのです。しかし最初の例では型宣言は出てきません。必要ないかぎり,型は推論されるからです。

著者プロフィール

小飼弾(こがいだん)

1969年生まれ,東京都出身。元ライブドア取締役の肩書きよりも,最近はPokemon GOのガチトレーナーのほうが有名になりつつある……かもしれない永遠のエンジニアオヤジ。

活躍の場はIT業界だけでなく,サブカルからアカデミックまで多方面にわたり,ネットからの情報発信は気の向くまま毎日毎秒! https://twitter.com/dankogai,ニコニコチャンネルは,http://ch.nicovideo.jp/dankogai,blogはhttp://blog.livedoor.jp/dankogai/

当社刊行書籍は『小飼弾のアルファギークに逢ってきた』『小飼弾のコードなエッセイ』など。他にも著書多数。

コメント

コメントの記入