設計やってたら,設計ミスってて,というか設計の筋が悪かったらしく,テストも書きにくいし,修正も難しくて全然通らなかったけど,同僚と会話しつつ設計を見直したら一瞬でテスト通るようになって,示唆的で学びがある一日だった。
エラー処理,Goとかの世界観だと2値を返してifで分岐する,ということをよくやるけど,やはり大域脱出の力は偉大で,困ったらthrowすればいいというのは本当によくできている。
今はPerlを書いているのでかっこいい例外処理システムはなくて,2値を返すか,Try::Tiny
を使ってなんとかしている。2値を返すパターンでやってると,そういう関数が複数あって,成功してる場合だけ処理を続けたいとか,そういう状況になってしまって,Either
モナドほしいね,みたいな状態になっていく。
大域脱出使うと,エラーを入れるレキシカル変数がごっそり減って,とにかく得という印象になった。Goとは違って,Perlは静的型付けではないので,2値でやる恩恵にあまり与れていない。
だいたい自分が困ってるときはエラー処理でハマってて,いい感じにフローを作ってあげたいけどうまくいかずに筋悪い難解なことをして,レビューではじかれる,ということがあるので,そのへん勉強したい。