こんばんは、Lineです。
文字列定数中の式展開というのは、
値段は、120
「お会計は、[値段×1.05]円です。」を表示する
ーーマニュアル「式の書き方」より抜粋
というように、かぎかっこの中に角括弧を入れて
角括弧中の式を実行した結果を文字列定数中に埋め込むものです。
要望は、
1. 現在の[]による記述を廃止して、新たな記述を設ける。
2. 現在の[]による文字列定数中の特殊な文字に対するエスケープ方式を廃止して、新たな記述方式を設ける。
の2つです。
かなり無理のある要望だとは分かっております。
しかし現状の構文だと、場合によっては他のスクリプト言語に比べて、冗長な記述になる場合があります。
たとえば、文字列中の「[」と「]」で囲まれた文字列を探す正規表現を考える場合、
正規表現:文字列から「\[[].*?\[]]」を取り出す
現在のプロデルでは以上のように記述します。
なぜなら、プロデルで [ と ] は文字列定数中で意味のある記号のため、
それぞれ [ と ] で囲んでエスケープしなければなりません。
さらに、[ と ] は正規表現でも意味のある記号のため、
\ を記号の左側につけてエスケープしなければなりません。
これを他のスクリプト言語(Ruby)で書き直すと、
str.match("\[.*?\]")
というようになります。
2つの言語によるプログラム例から、文字列定数の部分だけを取り出して比較すると、
\[.*?\]
\[[].*?\[]]
というように、
プロデルはほかのスクリプト言語に比べ、冗長で分かりづらい記述になっています。
このようなケースは少ないかもしれませんが、
いずれにしても、正規表現では [ と ] の記号をよく使うため、
現在のプロデルのように、[ と ] で囲んでエスケープすると、冗長な記述になってしまいます。
具体的にどのような記述を新たに設けるかは、
言語仕様にかかわることなので、ゆうとさんに判断をしていただきたいのですが、
私は次のような案を持っています。
1. Ruby方式の式展開構文:#{ 式 }(半角/全角)
なでしこでは式展開の構文に{}を使っていますが、
これだけだと、ほかの意味を持つ記号(正規表現など)とダブってしまいます。
そこで、Ruby方式を採用して、前に # をつけることで、記号がダブることを防ぎます。
また、この方式に使う記号は IME による変換を必要としない記号のため、素早く入力することができます。
2. \(バックスラッシュ)による記号のエスケープ
現在の [ と ] によるエスケープの場合、どうしても冗長で分かりにくくなってしまうので、
簡潔な \ によるエスケープを採用します。
長々と申し訳ありません。
これで以上です。
検討よろしくお願いいたします。
こんにちは ゆうとです。
ご意見ありがとうございます。
> 正規表現:文字列から「\[[].*?\[]]」を取り出す
私も経験ありますが、確かに、正規表現の時は不便ですね。
また、複数行にまたがる文字列を指定するときも、
[や」を探して、[ ]で囲む必要があったので、
改善する必要があると思います。
> 1. Ruby方式の式展開構文:#{ 式 }(半角/全角)
> 2. \(バックスラッシュ)による記号のエスケープ
当初からバックスラッシュにする方法は検討していました。
ただ、ファイルのパスを指定する際に「\\」と書かなければいけないのが
不便だなと思っていたのと、改行を表すのに「\n」と書くよりも
[改行]と書けた方が読みやすいと思っていましたので
現状のような仕様にしました。
最新版で、“「”と“」”を重ねて書くことで、
現在の[ ]による記述を無効にする構文を用意しました。
例 「「\[.*?\]」」
C#では @" " などと書くことで、バックスラッシュを
無効にすることができますが
これに似た方法であれば、現状のプロデルの仕様を大きく変更せずに
導入できますので、取り入れてみました。
正規表現の問題もこれなら問題ないかと思います。
しばらく運用してみて問題があれば、再検討してみます。
ではでは