正規表現が構文として必要かどうかという話から

適当にツイートを洗い出してまとめた。これから読むところ。
24
前へ 1 ・・ 6 7
FUJI Goro @__gfx__

@xtetsuji golangとdartは性質が全然ちがうので、どっちを選択するかはあまり迷わないですね。こなたりうまいなあと感じます。

2013-12-16 09:41:40
methane @methane

@__gfx__ https://t.co/PpLNGJ9CBO にもコメントしましたが、今手元にある Python プロジェクトだと、120ファイル10000行で、 import re は3つしかない。利用箇所は2つ。 import 1つ余計だった!クソが!

2013-12-16 09:42:05
OGATA Tetsuji @xtetsuji

@__gfx__ あぁ、ちゃんと住み分けが出来ているんですねー。Goは少し触ったのですが、Dartのほうは言語仕様すら全く見たことがなかったので、分かっていませんでした。

2013-12-16 09:42:39
FUJI Goro @__gfx__

@methane それ、正規表現が使いにくいからそうなっているだけなのでは!

2013-12-16 09:42:45
methane @methane

@__gfx__ 文字列の包含や prefix の判定 の高級で可読性の高いやり方がないの、JavaScript も同じですよね。 Perl はよく知りませんが。 そういった言語では、正規表現の力がいらない場面でも正規表現使ったほうが簡潔にかけてしまうことがあるので (続く)

2013-12-16 09:45:24
FUJI Goro @__gfx__

てもとのRubyコードで =~ \bmatch\b \bgsub\b を検索したら400件ほどあったけど、固定文字列のパターンがぱっと目半分くらい、そうでないケースはメソッドでは表現が難しそう(\dの抜き出しとか)という感じ。

2013-12-16 09:45:57
methane @methane

@__gfx__ (続き) 正規表現の利用頻度が高く、正規表現がどれくらい日々使われるものかという認識に差が出るのではないかというのが僕の主張です。

2013-12-16 09:46:19
methane @methane

@__gfx__ 例えば、 Python では \d+-\d+ みたいなバリデーションはほとんどしません。 a, b = map(int, s.split('-')) と書いて例外に任せます。文字列と数値の型が暗黙に変換される言語では、正規表現でキャプチャした方が楽。

2013-12-16 09:49:16
methane @methane

@__gfx__ いやだから、ただの import re と数タイプ避けるために無理して正規表現避けたりしませんて

2013-12-16 09:50:55
methane @methane

@__gfx__ 無理なく避けられる正規表現を避けたらこんくらいになるのです。ちなみに Web アプリ。

2013-12-16 09:51:30
ぐるぐる系SQL @bleis

正規表現、文字の並びしか扱えないのがアレ。その点、パーサーコンビネータならどんな列でも扱える!FParsec?知らない子ですね。

2013-12-16 09:51:38
FUJI Goro @__gfx__

@methane /(\d+)-(\d+)/ とmap(int, s.split('-')) で後者のほうが読みやすい!?その主張は到底うけいれがたいです。ぼくがコードレビュアーで後者のようなコードがあったら正規表現で書きなおすよう言っちゃいますね…。

2013-12-16 09:51:52
methane @methane

@__gfx__ \d+ したあと int に変換しますよね?

2013-12-16 09:53:05
FUJI Goro @__gfx__

@methane 入力フォーマットの定義とその後のデータ変換を混在させているの、非常に読みにくいと感じます。

2013-12-16 09:53:44
Kazuho Oku @kazuho

StrStartsWith(hay, "foo")ってコード見て、これは先頭の空白を無視するんだっけどうだっけって考えるより hay.match(/^\s*foo/) とか書いてあるほうが読みやすい

2013-12-16 09:54:07
藤枝和宏 @kfujieda

正規表現リテラルだけで議論するからおかしくなる。正規表現リテラルに容易に式を埋め込みできるとか、キャプチャを特殊変数を参照できるとか、perl由来の正規表現の機能がいるかどうかで議論しないと。これらの機能はライブラリでは置き換えできないのだから。

2013-12-16 09:54:37
methane @methane

@__gfx__ int への変換が必要なくて、単にバリデーションだけが必要なら、正規表現の方がいいと思います。

2013-12-16 09:54:40
Kazuho Oku @kazuho

なので、正規表現リテラルがあって使いやすい言語では、単純なケースにおいても正規表現を使うべきだと思います

2013-12-16 09:55:09
しょーま @shomah4a

なんか軸がアッチコッチに飛んでよくわからない議論になっているような気がするな

2013-12-16 09:55:42
FUJI Goro @__gfx__

たしかに正規表現の機能とリテラルの有無どうのとかいろいろ議論が発散していてよくない。

2013-12-16 09:55:46
FUJI Goro @__gfx__

@methane いや、変換があろうとなかろうと、入力値の定義をそれをどう使うかを混在させるのは筋が悪いと思います。正規表現を使うかどうかはとりあえず関係なく、入力値のフォーマットはメンテしやすくあるべきで、それ以外の処理は分離すべきだと思います。

2013-12-16 09:58:25
きしだൠ(K1S) @kis

よかった。正規表現がなくて使いにくい言語でよかった。

2013-12-16 09:58:43
methane @methane

@__gfx__ うーん、例えば int じゃなくて map(uuid.UUID4, s.split()) とか、文字列形式から変換する型全てに対して使えるんですよね。

2013-12-16 09:59:46
methane @methane

@__gfx__ \d+ はシンプル過ぎましたが float とか、厳密に入力フォーマットを規定する必要がなく、値を取得する+できなかったらエラーにしたいというだけの場面では float(s) UUID4(s) みたいなのが全部 ValueError 投げるので便利なのです

2013-12-16 10:01:05
FUJI Goro @__gfx__

@methane それ、どういう入力がもとめられているかパッと見てわからないです。末尾にノイズがまじっていてもいいのかとか。自社開発のweb appは往々にして仕様書がないので、コードを見て入力フォーマットが理解できるのは重要だと思います。

2013-12-16 10:01:51
前へ 1 ・・ 6 7