おなまえ
Eメール
タイトル
コメント
参照先
アイコン [アイコン参照]
暗証キー (英数字で8文字以内)
文字色
Re: 【要望】 文字列定数中の式展開の構文について 投稿者:Line 投稿日:2012/02/21(Tue) 03:24 No.30

inu1.gif こんばんは、Lineです。

文字列定数中の式展開というのは、

  値段は、120
  「お会計は、[値段×1.05]円です。」を表示する
  ーーマニュアル「式の書き方」より抜粋

というように、かぎかっこの中に角括弧を入れて
角括弧中の式を実行した結果を文字列定数中に埋め込むものです。

要望は、
 1. 現在の[]による記述を廃止して、新たな記述を設ける。
 2. 現在の[]による文字列定数中の特殊な文字に対するエスケープ方式を廃止して、新たな記述方式を設ける。
の2つです。

かなり無理のある要望だとは分かっております。
しかし現状の構文だと、場合によっては他のスクリプト言語に比べて、冗長な記述になる場合があります。
たとえば、文字列中の「[」と「]」で囲まれた文字列を探す正規表現を考える場合、

  正規表現:文字列から「\[[].*?\[]]」を取り出す

現在のプロデルでは以上のように記述します。
なぜなら、プロデルで [ と ] は文字列定数中で意味のある記号のため、
それぞれ [ と ] で囲んでエスケープしなければなりません。
さらに、[ と ] は正規表現でも意味のある記号のため、
\ を記号の左側につけてエスケープしなければなりません。

これを他のスクリプト言語(Ruby)で書き直すと、

  str.match("\[.*?\]")

というようになります。
2つの言語によるプログラム例から、文字列定数の部分だけを取り出して比較すると、

  \[.*?\]
  \[[].*?\[]]

というように、
プロデルはほかのスクリプト言語に比べ、冗長で分かりづらい記述になっています。

このようなケースは少ないかもしれませんが、
いずれにしても、正規表現では [ と ] の記号をよく使うため、
現在のプロデルのように、[ と ] で囲んでエスケープすると、冗長な記述になってしまいます。

具体的にどのような記述を新たに設けるかは、
言語仕様にかかわることなので、ゆうとさんに判断をしていただきたいのですが、
私は次のような案を持っています。

1. Ruby方式の式展開構文:#{ 式 }(半角/全角)

 なでしこでは式展開の構文に{}を使っていますが、
 これだけだと、ほかの意味を持つ記号(正規表現など)とダブってしまいます。
 そこで、Ruby方式を採用して、前に # をつけることで、記号がダブることを防ぎます。
 また、この方式に使う記号は IME による変換を必要としない記号のため、素早く入力することができます。

2. \(バックスラッシュ)による記号のエスケープ

 現在の [ と ] によるエスケープの場合、どうしても冗長で分かりにくくなってしまうので、
 簡潔な \ によるエスケープを採用します。

長々と申し訳ありません。
これで以上です。
検討よろしくお願いいたします。


Re: 【要望】 文字列定数中の式展開の構文について 投稿者:ゆうと 投稿日:2012/02/23(Thu) 23:19 No.31

nezu.gif こんにちは ゆうとです。
ご意見ありがとうございます。

> 正規表現:文字列から「\[[].*?\[]]」を取り出す

私も経験ありますが、確かに、正規表現の時は不便ですね。
また、複数行にまたがる文字列を指定するときも、
[や」を探して、[ ]で囲む必要があったので、
改善する必要があると思います。

> 1. Ruby方式の式展開構文:#{ 式 }(半角/全角)
> 2. \(バックスラッシュ)による記号のエスケープ

当初からバックスラッシュにする方法は検討していました。
ただ、ファイルのパスを指定する際に「\\」と書かなければいけないのが
不便だなと思っていたのと、改行を表すのに「\n」と書くよりも
[改行]と書けた方が読みやすいと思っていましたので
現状のような仕様にしました。

最新版で、“「”と“」”を重ねて書くことで、
現在の[ ]による記述を無効にする構文を用意しました。

例 「「\[.*?\]」」

C#では @" " などと書くことで、バックスラッシュを
無効にすることができますが
これに似た方法であれば、現状のプロデルの仕様を大きく変更せずに
導入できますので、取り入れてみました。
正規表現の問題もこれなら問題ないかと思います。

しばらく運用してみて問題があれば、再検討してみます。
ではでは


- YY-BOARD -