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

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

言語の使いやすさ使いにくさ、慣れ不慣れ、手に馴染む馴染まない、みたいなの、結局普段書くコードに対してのあらゆる要素を複合した話なので、どのリテラル/機能/文法がどうだからどう、という話をしてもだいたい意味ないと思う。作る側には多分意味があるけど、使う側は馴染むものを使えばよい。

2013-12-16 01:39:46
tagomoris @tagomoris

ということで、Perlをゲジゲジのように嫌う人にPerlの良さを語ってもしょうがない、といういつもの感覚に落ち着く

2013-12-16 01:40:29
methane @methane

セミコロン必須・推奨されてたらタイプするし非推奨ならタイプしないし、インデントも推奨に合わせるし、正規表現リテラルもあれば使うだろうし、あまり表面的な構文には興味が無い。一貫性がないとか、エラー処理のポリシーが破綻してるとか、玄人でも推奨する書き方に差が大きいのはダメだと思う。

2013-12-16 01:49:24
methane @methane

その道の玄人が、他人には $q->bindParam($x, PDO::PARAM_INT) しろと教えておいて、自分は $x = (int)$x; $sql = "... LIMIT $x;"; みたいなコードを書くのとか良くないと思う。

2013-12-16 01:51:50
methane @methane

ちなみに $x = (int)$x; が行けないのは、 $x が空文字列や全然違う文字列だった時にも $x = 0; になるので、エラーが起きてもさかのぼって $x の値が何か調べないと何が起こったのか解らなくなるから。

2013-12-16 01:54:48
順三朗 @junzabroP

@methane なるほど。そういうことを想定するならbindParamのほうが総合的に言って楽そうですね

2013-12-16 01:55:56
MURAOKA Taro @kaoriya

@methane 例外、投げてくれないのか…

2013-12-16 01:57:22
methane @methane

@junzabroP なんだけど、面倒で $q->execute("... LIMIT $limit", array($a, $b)); みたいに書いちゃうんですよね。。。 Python みたいに安全な書き方が簡潔な書き方というポリシーに慣れてるとその罪悪感で精神的に辛い

2013-12-16 01:57:41
methane @methane

@kaoriya Python は int("Foo") が例外投げますが、 php は $x = (int)"foo"; は例外投げないですね。

2013-12-16 01:58:16
MURAOKA Taro @kaoriya

@methane atoi() そのまんまか… (´・ω・`)

2013-12-16 01:59:25
Yosuke Furukawa @yosuke_furukawa

“正規表現リテラルがあると便利な例。これを文字列操作メソッドで解決するとなるとかなり難しいと思われますがどうでしょう。 また、正規表現リテラルがなくてもじっさいにはあまり変” http://t.co/FsdXxWvYMO #正規表現

2013-12-16 09:12:29
FUJI Goro @__gfx__

正規表現リテラルの件、あとでブログ書きたい。

2013-12-16 09:18:04
SKS rep @repeatedly

正規表現リテラルの効率の良い作り方,なら読みたい

2013-12-16 09:18:34
methane @methane

Python は正規表現リテラルないけど、リテラルある言語に比べて import re と数タイプのオーバーヘッドで正規表現使えて、その程度のオーバーヘッドを避けるために正規表現よりも面倒な文字列操作とかはしない。

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

w in x や w.startswith(x) を strpos($x, $w) >= 0 とか strpos($x, $w) === 0 とか書かないといけない言語で、正規表現必要ないのにシンプルな文字列操作の可読性が低いから正規表現を使うというケースの方が多いんじゃないか?

2013-12-16 09:28:21
FUJI Goro @__gfx__

@methane 単純な固定文字列に対してのマッチングなら別に正規表現はいらないんですよ。特定パターンのマッチングや抜き出し、置き換えの時にこそ正規表現は力を発揮します。そいういう意味では昨日のgistの例は単純すぎました。

2013-12-16 09:31:19
FUJI Goro @__gfx__

というか @methane さんは正規表現自体べつに必要ない、と言っているように見える。

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

.startswith() があれば、コードレビューの時に ^ は文字列の先頭じゃなくて行頭だから \A 使え、いや multiline じゃないから ^ は文字列の先頭だ、いやいやそんなライブラリ依存のフラグとか覚えなくてもメンテナンスできる正規表現書けみたいな議論が要らない

2013-12-16 09:32:22
FUJI Goro @__gfx__

startsWith()のある言語でstartsWith()で済ませられるケースなら、正規表現構文のある言語でもstartsWith()使いますよ。^か\Aかという議論は避けたいので。

2013-12-16 09:33:29
methane @methane

@__gfx__ そんなことはないです。正規表現は必要です。ただ、すべての人が毎日使うものではないので、数タイプ削減するためにリテラル導入すると、逆に正規表現を使うために覚えないといけないことが増えるので、あったら便利だけどなくてもいいし、自分が言語設計者なら追加したくない。

2013-12-16 09:34:06
methane @methane

@__gfx__ 単純な固定文字列に対してのマッチングのために正規表現使うコードをたくさん読んできたんですよ… (PHP...

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

@__gfx__ if (strpos($s, $needle)) を見て、先頭にあったら条件盛れるだろ >= 0 書けみたいなやりとりがある言語だと、 if (preg_match("^foo", $s)) みたいに書く人がいたりするんですよ…

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

@methane PHPの正規表現まわりはプログラミング言語屈指のカオスっぷりとききいています。PHPの経験で正規表現まわりの批判につなげるのはあまり適切とも思えません…。

2013-12-16 09:40:17
FUJI Goro @__gfx__

@bleis パーサコンビネータが言語にくみこまれてるなら喜んで!

2013-12-16 09:40:55
前へ 1 ・・ 5 6 次へ