現在、日本語プログラミング言語「なでしこ」にはWindows版のなでしこv1と、Webブラウザ/Node.jsに対応しているなでしこv3があります。なでしこはv3とv1で文法が大きく違う点があります。それが、v3ではインデントによるブロック構文を使わないことです。
それで条件分岐などブロックの末尾には「ここまで」と書くことになります。しかし、「ここまで」と書くことがだるいという声も多く、先日のバージョンアップで省略できるようになりました。その詳細を紹介します。
- 2022/09/05: v3.3.66 でインラインインデント構文に磨きをかけました。
- 2020/12/24: v3.1.11 でインデント構文を微修正しました。
なでしこv1/v3で条件分岐の書き方の違い
なでしこv1で条件分岐を書くには以下のように書きます。ブロックはインデントで表現します。
もし、今>「12:00:00」ならば
「こんにちは」と表示。
違えば
「おはよう」と表示。
これを、なでしこv3で書くと以下のようになります。ブロックはインデントではなく「ここまで」と書くことで表現します。
もし、今>「12:00:00」ならば
「こんにちは」と表示。
違えば
「おはよう」と表示。
ここまで。
ほとんど同じなのですが、違うのはブロックの末尾に「ここまで」があることです。
最近の日本語入力は、途中まで入力すると、予測入力が可能なので、なでしこv3のプログラムを数回書くと「ここ」とタイプすると「ここまで。」と補完してくれることでしょう。
インデント廃止の経緯
実際、なでしこのプログラムを掲示板などに貼り付けた時やWeb媒体のコラムでプログラムが紹介された時、ただしくインデントが保持されず、エラーで動かないという事が多かったのです。それで、Webを対象にした「なでしこ3」ではインデント構文を廃止したという経緯があります。
でも「ここまで」と打つのがだるい
それでも、なでしこv1のエレガントなインデント表現になれてしまっている方には「ここまで」と入力するのが苦痛である、とてもだるいという声もありました。(これ、Pythonに慣れると、Rubyのendを入力するのがだるくなるのに近い感覚でしょうか???)確かに「ここまで」がない方がプログラムはスリムです。
「ここまで」と打たなくても良くなった?!
そこで、なでしこv3.1.5(v3.1.11で修正)では、プリプロセス処理で、インデント構文をエミュレートするように修正しました。「ここまでだるい」と言い続けてきた皆さんに朗報です!(そして貴重なご意見に感謝です。)
それで、プログラムの冒頭に「!ここまでだるい」あるいは「!インデント構文」と書くと、インデントによるブロック表現が可能になります。なでしこv3の『簡易エディタ』でも試すことができます。
!インデント構文
もし、今>「12:00:00」ならば
「こんにちは」と表示。
違えば
「おはよう」と表示。
あるいは、末尾にコロン「:」を書くと、インラインインデント構文が適用され、字下げをやめたところに、自動的に「ここまで」が挿入されます。
もし、今>「12:00:00」ならば:
「こんにちは」と表示。
違えば:
「おはよう」と表示。
単純な場合だけでなく構文を入れ子にした場合も正しく動きます。
マイナビニュースに掲載されている「うるう年判定のプログラム」もエレガントに記述できます。
!ここまでだるい
西暦年は2019。
結果は「平年」
もし、(西暦年を4で割った余り)が0ならば
結果は「うるう年」
もし、(西暦年を100で割った余り)が0ならば
結果は「平年」
もし、(西暦年を400で割った余り)が0ならば
結果は「うるう年」
結果を表示。
ただし、基本的になでしこ3はインデント構文を採用しているわけではないので、内部では単純な置換処理によってエミュレートされているという点を忘れないようにする必要があります。もし、うまく変換されていなければ、GitHubのIssueか、あるいは、各種SNSなどでにてご報告ください。また、v3.1.5ではエラーがあったときの行番号が「ここまで」が自動挿入された分だけずれてしまいます。この問題は既に修正済みです(2020/12/05のv3.1.8にて修正)。
まとめ
なでしこv3.1.5(v3.1.11で修正)以降、なでしこv1との文法互換性が向上しました。もし世の中に「!ここまでだるい」が溢れるようになれば、今後のなでしこのバージョンではインデント構文を復活させる可能性もあります。
今後とも、なでしこの開発を頑張りますので、応援よろしくお願いします。
参考
なお、インデント構文やその他の文法については、マニュアルにまとまっています。