7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

現在、日本語プログラミング言語「なでしこ」には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との文法互換性が向上しました。もし世の中に「!ここまでだるい」が溢れるようになれば、今後のなでしこのバージョンではインデント構文を復活させる可能性もあります。

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

参考

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

7
5
0

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
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?