Ceylonでのファイルからのデータ読み込みをしてみます。
module.ceylonに下記のモジュールを追加します。
import ceylon.file "1.0.0";
そして読み込みソースコード。
hoge.txtの中身を読み込んでコンソール出力してます。
void fileReadExample() {
Resource file = parsePath("hoge.txt").resource;
if(is File file) {
try(reader = file.Reader()) {
while (exists line = reader.readLine()) {
print(line);
}
}
}
}
if(is File file)
この行で型をチェックしています。
Pathのリソースはディレクトリを表していたりNilだったりするので
ちゃんと型チェックしないとFile型として使えないです。
そしてFile型としてfile変数を扱えるのはこのifのブロックスコープの中だけですね。
try(reader = file.Reader()) {
今回新しい要素としてはこのtry文です。
このtry開始のときのreader変数は最後にcloseが呼ばれます。
普通にtry-catch-finallyを書くことも出来ますが、
ストリームなどの閉じ忘れを無くすためにこちらの書き方が推奨です。
Javaで言うと、Java7からサポートされた構文と同じ感じですね。
そんな感じでIOの閉じ忘れをしないいつもの構文や
Ceylonの型チェックの厳しさがちょっと伝わるコードかなと思いました。