LoginSignup
5

現在、日本語プログラミング言語「なでしこ」にはWindows版のなでしこv1と、Webブラウザ/Node.jsに対応しているなでしこv3があります。なでしこはv3とv1で文法が大きく違う点があります。それが、v3ではインデントによるブロック構文を使わないことです。

それで条件分岐などブロックの末尾には「ここまで」と書くことになります。しかし、「ここまで」と書くことがだるいという声も多く、先日のバージョンアップで省略できるようになりました。その詳細を紹介します。

  • 2022/09/05: v3.3.66 でインラインインデント構文に磨きをかけました。
  • 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
もし、今>「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との文法互換性が向上しました。もし世の中に「!ここまでだるい」が溢れるようになれば、今後のなでしこのバージョンではインデント構文を復活させる可能性もあります。

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

参考

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5