golangのコードを見ていると、ifで実行しつつエラーの判定をしていることがある。
When Should I Use One Liner if...else Statements in Go? - Calhoun.io
https://www.calhoun.io/one-liner-if-statements-with-errors/
ここの最初に出てくるようなやつね。
01: if err := doStuff(); err != nil { 02: // handle the error here 03: }
見た目から入っていきたいお年頃。こういう書き方はgolangっぽいという気がするのでまねしたい。
16進数の文字列が渡されたら処理をして、そうじゃなかったら別の処理、みたいなことをやろうとしていた。
0xで始まる数字であれば16進数と見なそうかと思ったが、そんなに急ぐ処理でも無いのでデコードしてエラーがなければ、という判定までしよう。
20byteなので、0xまで入れたら42文字。
01: if (len(mojimoji) == 42) && (_, err := hex.DecodeString(mojimoji[2:]); err == nil) { 02: ... 03: } else { 04: ... 05: }
syntax error: unexpected comma, expecting )
えっ、ダメなの??
ifを2つに分けると、大丈夫。
01: if len(mojimoji) == 42 { 02: if _, err := hex.DecodeString(mojimoji[2:]); err == nil { 03: ... 04: } 05: } else { 06: ... 07: }
golang以外だったら分けて書くだろうし、やっぱりセミコロンを挟む書き方はちょっと違うのだろう。
言語仕様を探し出せなかったのだが、ifにセミコロンがあると、セミコロン前が処理相当になるらしい。
じゃあ、ダメか。
先にhex.DecodeString()してしまえば、セミコロンの後ろに条件文を&&で書いてしまえば良いかもしれん。
が、それは嫌だ!
文字長の処理の方が16進数文字列のデコードより処理が軽いのは間違いなかろう。だったら、先に軽い処理で露払いをして、その壁を乗り越えてから本番を迎えるのがよかろう。
「急ぐ処理じゃあない」と書いておきながら矛盾している気もするが、譲れない線もあるのだ。
意味があるかどうかは別としてね。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。