swift3+OSX開発格闘記第7回「do、try、catch」

Author:

どんな言語でもある例外処理、trycatch。
しかしswiftはtry catchじゃなくてdo try catchなのです。
他の言語やってきた人ならdoってwhileとくっつきそうな印象を受けてしまうし、
どうにも違和感が出てきてしまうけどまあそういうものらしいです。

で、tryに入る文はthrowできないと駄目。
キャストエラーをtry catchで引っ掛けるとかできないんですよ。
C#でこういう書き方よくするのですが、これはダメー。

try {
    int a = int.parse(str);
} catch (FormatException) {
    Console.WriteLine("error");
}

nullpointerとかtry catchで引っ掛けるんじゃなくてちゃんと判定しろ、ということなのですね。
まあ?とか使う時点でnullかどうかがすぐ分かるってことなのでしょう。
実際c#もTryParseってのあるし。

何でもかんでもtry catchに放り込めないのは使いづらくて嫌なのですが、まあ仕方ない。

で、さらに嫌らしいのはfinally。
普通の言語だとこうなりますよね。

try {

} catch {

} finally {

}

これがswiftだと

do {
  defer {

  }
  try
}
catch {

}

という構文に。なんですかこれは。
つまりのところ、catchの前にfinallyに相当するdeferが呼ばれるのです。
ああもう、と言いたいw

まあcatch文でexitしてもreturnしてもいいように、という意味なのでしょうけど。
ちょっと他の言語に慣れていると気持ち悪いですねえ。

第1回「ぐぐって出てくるのはどれもこれもiOS」
第2回「配列を渡すとインスタンスがコピーされた」
第3回「初期化しないメンバ変数なんて許しません」
第4回「NSStringとString、NSURLとUrl」
第5回「for文が、++が、、、」
第6回「ビルドおもーい」
第7回「do、try、catch」
第8回「swift2では動くのにswift3では動かない」
第9回「ふおおWindowsFormみたい」
第10回「Labelの値を変える」
第11回「windowControllerとViewControllerとView」
第12回「ボタンはViewController、メニューはDelegate」
第13回「TreeViewのしんどさ」
第14回「¥nマークは改行しません」
第15回「instantiateじゃ駄目ぇ」
第16回「ScrollViewの中にTextView」
第17回「ファイルをどう読み書きすればいいんじゃ」
第18回「右クリック・・・」
第19回「isIntなんて無いです」
第20回「anyはswitchでキャスト」
第21回「MessageBox.Show」
第22回「BezierはViewの中で」
第23回「512pxのアイコンを用意せよ」
第24回「アーカイブ作成」
第25回「これから始める人へ」

Facebook にシェア
Pocket