- rokujyouhitoma
- 30928
- 6
- 95
- 18
@xtetsuji golangとdartは性質が全然ちがうので、どっちを選択するかはあまり迷わないですね。こなたりうまいなあと感じます。
2013-12-16 09:41:40@__gfx__ https://t.co/PpLNGJ9CBO にもコメントしましたが、今手元にある Python プロジェクトだと、120ファイル10000行で、 import re は3つしかない。利用箇所は2つ。 import 1つ余計だった!クソが!
2013-12-16 09:42:05@__gfx__ あぁ、ちゃんと住み分けが出来ているんですねー。Goは少し触ったのですが、Dartのほうは言語仕様すら全く見たことがなかったので、分かっていませんでした。
2013-12-16 09:42:39@__gfx__ 文字列の包含や prefix の判定 の高級で可読性の高いやり方がないの、JavaScript も同じですよね。 Perl はよく知りませんが。 そういった言語では、正規表現の力がいらない場面でも正規表現使ったほうが簡潔にかけてしまうことがあるので (続く)
2013-12-16 09:45:24てもとのRubyコードで =~ \bmatch\b \bgsub\b を検索したら400件ほどあったけど、固定文字列のパターンがぱっと目半分くらい、そうでないケースはメソッドでは表現が難しそう(\dの抜き出しとか)という感じ。
2013-12-16 09:45:57@__gfx__ (続き) 正規表現の利用頻度が高く、正規表現がどれくらい日々使われるものかという認識に差が出るのではないかというのが僕の主張です。
2013-12-16 09:46:19@__gfx__ 例えば、 Python では \d+-\d+ みたいなバリデーションはほとんどしません。 a, b = map(int, s.split('-')) と書いて例外に任せます。文字列と数値の型が暗黙に変換される言語では、正規表現でキャプチャした方が楽。
2013-12-16 09:49:16正規表現、文字の並びしか扱えないのがアレ。その点、パーサーコンビネータならどんな列でも扱える!FParsec?知らない子ですね。
2013-12-16 09:51:38@methane /(\d+)-(\d+)/ とmap(int, s.split('-')) で後者のほうが読みやすい!?その主張は到底うけいれがたいです。ぼくがコードレビュアーで後者のようなコードがあったら正規表現で書きなおすよう言っちゃいますね…。
2013-12-16 09:51:52StrStartsWith(hay, "foo")ってコード見て、これは先頭の空白を無視するんだっけどうだっけって考えるより hay.match(/^\s*foo/) とか書いてあるほうが読みやすい
2013-12-16 09:54:07正規表現リテラルだけで議論するからおかしくなる。正規表現リテラルに容易に式を埋め込みできるとか、キャプチャを特殊変数を参照できるとか、perl由来の正規表現の機能がいるかどうかで議論しないと。これらの機能はライブラリでは置き換えできないのだから。
2013-12-16 09:54:37@methane いや、変換があろうとなかろうと、入力値の定義をそれをどう使うかを混在させるのは筋が悪いと思います。正規表現を使うかどうかはとりあえず関係なく、入力値のフォーマットはメンテしやすくあるべきで、それ以外の処理は分離すべきだと思います。
2013-12-16 09:58:25@__gfx__ うーん、例えば int じゃなくて map(uuid.UUID4, s.split()) とか、文字列形式から変換する型全てに対して使えるんですよね。
2013-12-16 09:59:46@__gfx__ \d+ はシンプル過ぎましたが float とか、厳密に入力フォーマットを規定する必要がなく、値を取得する+できなかったらエラーにしたいというだけの場面では float(s) UUID4(s) みたいなのが全部 ValueError 投げるので便利なのです
2013-12-16 10:01:05@methane それ、どういう入力がもとめられているかパッと見てわからないです。末尾にノイズがまじっていてもいいのかとか。自社開発のweb appは往々にして仕様書がないので、コードを見て入力フォーマットが理解できるのは重要だと思います。
2013-12-16 10:01:51