Help us understand the problem. What is going on with this article?

なでしこ3で「ここまで」で書くのだるいよね

現在、日本語プログラミング言語「なでしこ」にはWindows版のなでしこv1と、Webブラウザ/Node.jsに対応しているなでしこv3があります。なでしこはv3とv1で文法が大きく違う点があります。それが、v3ではインデントによるブロック構文を使わないことです。それで条件分岐などブロックの末尾には「ここまで」と書くことになります。しかし、「ここまで」と書くことがだるいという声も多く、先日のバージョンアップで省略できるようになりました。その詳細を紹介します。

2020/12/24: v3.1.11 でインデント構文を微修正しました。

なでしこv1/v3で条件分岐の書き方の違い

なでしこv1で条件分岐を書くには以下のように書きます。ブロックはインデントで表現します。

挨拶v1.nako
もし、今>「12:00:00」ならば
  「こんにちは」と表示。
違えば
  「おはよう」と表示。

これを、なでしこv3で書くと以下のようになります。ブロックはインデントではなく「ここまで」と書くことで表現します。

挨拶v3.nako3
もし、今>「12:00:00」ならば
  「こんにちは」と表示。
違えば
  「おはよう」と表示。
ここまで。

ほとんど同じなのですが、違うのはブロックの末尾に「ここまで」があることです。

最近の日本語入力は、途中まで入力すると、予測入力が可能なので、なでしこv3のプログラムを数回書くと「ここ」とタイプすると「ここまで。」と補完してくれることでしょう。

インデント廃止の経緯

実際、なでしこのプログラムを掲示板などに貼り付けた時やWeb媒体のコラムでプログラムが紹介された時、ただしくインデントが保持されず、エラーで動かないという事が多かったのです。それで、Webを対象にした「なでしこ3」ではインデント構文を廃止したという経緯があります。

でも「ここまで」と打つのがだるい

それでも、なでしこv1のエレガントなインデント表現になれてしまっている方には「ここまで」と入力するのが苦痛である、とてもだるいという声もありました。(これ、Pythonに慣れると、Rubyのendを入力するのがだるくなるのに近い感覚でしょうか???)確かに「ここまで」がない方がプログラムはスリムです。

「ここまで」と打たなくても良くなった?!

そこで、なでしこv3.1.5(v3.1.11で修正)では、プリプロセス処理で、インデント構文をエミュレートするように修正しました。「ここまでだるい」と言い続けてきた皆さんに朗報です!(そして貴重なご意見に感謝です。)

それで、プログラムの冒頭に「!ここまでだるい」あるいは「!インデント構文」と書くと、インデントによるブロック表現が可能になります。なでしこv3の『簡易エディタ』でも試すことができます。

挨拶(v3.1.11以降).nako3
!ここまでだるい
もし、今>「12:00:00」ならば
  「こんにちは」と表示。
違えば
  「おはよう」と表示。

単純な場合だけでなく構文を入れ子にした場合も正しく動きます。

マイナビニュースに掲載されている「うるう年判定のプログラム」もエレガントに記述できます。

閏年判定.nako3
!ここまでだるい
西暦年は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との文法互換性が向上しました。もし世の中に「!ここまでだるい」が溢れるようになれば、今後のなでしこのバージョンではインデント構文を復活させる可能性もあります。

蛇足ですが「!インデント構文」オプションだけでなく、所有格の「の」の代入文に関しても使えるようになりました。「リンゴの値段は300。リンゴの値段を表示」が問題なく実行できます。(本来、変数名に「の」は使えません。)

今後とも、なでしこの開発を頑張りますので、応援よろしくお願いします。

参考

なお、インデント構文やその他の文法については、マニュアルにまとまっています。

kujirahand
「クジラ飛行机」では、技術文書の執筆や、Webアプリ、スマホアプリなどの開発をしています。代表作は日本語プログラミング言語「なでしこ」、テキスト音楽「サクラ」。最近は、JavaScript、Python、機械学習、GoやRustもやってます。Twitterで技術系呟きも https://twitter.com/kujirahand
https://kujirahand.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away