2014年12月31日水曜日

Swift

あるとき僕のことを flamencólogo と呼ぶ人がいて、不思議な気がしたことがある。僕のつもりとしては lingüista か filólogo なのだが、まあフラメンコについての論文を書いたりしているから、拒否するわけにもいかない。だとすると、スペイン語動詞活用形生成プログラムの開発をめぐる論文を書いている僕は procesamiento de lenguajes naturales を研究する人は何だろう、それだと言われても否定できないことになるか。

実際には自然言語処理と呼べるようなことはほとんどしていないが、文字列を処理する小さいプログラムは日常的に作って使っている。日々の業務には定型的な作業が多いので、それを (半) 自動化しようというのが主な目的だ。プログラムを書くのにかかる時間と、自動化で節約できる時間を比べたことはないが、手動でやるときに混入しかねないミスを排除できる安心感も含めれば、十分おつりが来ていると思う。

さて、プログラミング言語は世の中にたくさんある。僕の日常業務で行う処理に必要なプログラミングスキルなんか大したことはないので、ひとつの言語を深く学んで隅々まで理解したいという気持ちはない。というわけで、ふらふらといろんな言語をかじっている。今主に使っているのは Ruby で、少し本格的なものは Ocaml で書く。気が向いたら Clojure で書いてみたり、必要に迫られて AppleScript で作ったりしている。過去に「業務用」に使ったことのある言語はもっとあるが、現在僕のパソコン上で動いているプログラムはこれらの言語で書かれている (TeX を入れればこれも)。で、今回 Swift で小さいのを1つ書いた。

Swift は Apple が開発した言語で、iOS と Mac をターゲットにしている。自作の僕専用のプログラムを将来他の人にも使ってもらうためには、それなりのユーザーインターフェイスを構築する必要があるが、その際に使用する言語の候補として検討する、というのは表向きの理由で、本当は単にのぞいてみたかったのだ。静的型付けで型推論があり、シンタクスが単純なのでとりあえずは書き易い。「良い意味で、先行する他言語の寄せ集めになっている (荻原剛志 2014『詳解Swift』SBクリエイティブ、iii)」とは言い得て妙で、浅くざっと見ただけだが、いくつか思い出す言語があった。

今回書いたのは、標準入力またはファイルから複数行のデータを読み込み、それをランダムな順番に並べ替えて出力するプログラム。たとえば、この記事のデータを読み込んで「実際には・・・思う。/Swift は・・・あった。/あるとき・・・なるか。/今回・・・思う。」のように出力する (画面上は複数行にわたって見えるが、これらが我々が「行」と呼ぶものだ)。そんなプログラムが何の役に立つのかというと、たとえばテストの問題を作るときに既に存在するデータからランダムにいくつか選び出したいときなどに使える。最初String型とNSStringクラスの関係が理解できなかったり、オプション型の扱いに慣れなかったりしたが、まあ速く書けたのではないかと思う。