「なでしこ」で分かりやすいプログラムを書くTips

日本語プログラミング言語「なでしこ」で、より分かりやすいプログラムを書くのに`役立つTips`をいくつか紹介します。「なでしこ」で読みやすいプログラムを書くのは、「より日本語らしいプログラム」を書くことが助けになります。

> [本家マニュアル「FAQ/分かりやすいプログラムを書くポイント」にも転載しました](https://nadesi.com/v3/doc/index.php?FAQ%2F%E5%88%86%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)
> 本家マニュアルでは、プログラムを直接実行できます。

# コメントについて

分かりやすいプログラムを書こうと思った場合、コメントを書くのが一番役立ちます。コメントには何をするプログラムなのか、どのように使うのかをメモしておきます。

なでしこで使えるコメント記号は4つあります。特にどの記号にどんな意味があるとか規定はないので、好みの記号を使うと良いでしょう。日本語入力的に使いやすいものは、＃記号なので、筆者は＃をよく使っています。

```コメント.nako3
# ここはコメント(一行コメント)
※ ここはコメント(一行コメント)
// ここはコメント(一行コメント)
/* ここはコメント(範囲コメント) */
```

 - [(参考)なでしこ3 > 文法/コメント](https://nadesi.com/v3/doc/index.php?%E6%96%87%E6%B3%95%2F%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88&show)


# 変数名や関数名について

分かりやすいプログラムに欠かせない「コメント」ですが、コメントが長く書いてあれば分かりやすいプログラムとは言えません。コメントが少ないとしても、「**読んですぐ意味が分かるプログラム**こそが良いプログラム」です。

そして、数式やプログラムに意味づけするが、変数名や関数名です。できる限り「意味のある名前」、「名が体を表す」ものであるべきです。

例えば、300円のリンゴを10個、250円のミカンを20個買うプログラムを作ってみましょう。

```買い物-1.nako3
A＝10
O＝20
A×300+M×20を表示。
```

上記のプログラムでは変数AやOが何を表すのか、分かりませんね。分かりやすく、リンゴやミカンと書く方が親切です。そして、リンゴやミカンの値段なのか個数なのかもしっかり書くと良いでしょう。

ちょっと冗長に見えるかもしれませんが以下のように書いておく方が親切で分かりやすいものになります。

```買い物-2.nako3
# 価格と個数を指定
リンゴ価格＝300
リンゴ個数＝10
ミカン価格＝250
ミカン個数＝20

# 支払い金額を計算
支払い金額＝（リンゴ価格×リンゴ個数）＋（ミカン価格×ミカン個数）
支払い金額を表示。
```

ちなみに、上記のプログラムで「リンゴの価格」という変数名を使いたくなります。しかし、なでしこでは、「の」や「で」などは助詞として扱われてしまうため変数名に入れることができません。

どうしても変数名に「の」を使いたい場合には《リンゴの価格》のように《変数名》と二重山カッコで括ることでこの問題を回避できます。ただし、二重山カッコには「《》」、類似の「≪≫」があるので間違えないようにしましょう。

```買い物-3.nako3
# 価格と個数を指定
《リンゴの価格》＝300
《リンゴの個数》＝10
《ミカンの価格》＝250
《ミカンの個数》＝20

# 支払い金額を計算
支払い金額＝（《リンゴの価格》×《リンゴの個数》）＋（《ミカンの価格》×《ミカンの個数》）
支払い金額を表示。
```

## アルファベット一文字が役立つ場面

上記の説明を読むと、変数名には長いものを推奨しており、アルファベット一文字などはあまり推奨されないように思えます。しかし、アルファベット一文字というのは、とても便利なものでプログラマーの慣用的に以下のような用途に利用されます。

| 変数名 | 用途 |
|-------|------|
| S | 一時的に用いる文字列変数(Stringの略字) |
| A | 一時的に用いる配列変数(Arrayの略字) |
| O | 一時的に用いる辞書型変数(Objectの略字) |
| I / J / K / N / M | 繰り返しのループに用いられる |

こうしたアルファベット一文字は、慣用的であり、よく使われるため、プログラマーならば、すぐ意味が分かるので、使い勝手も良く忌避されるものではありません。ただし、何事も多用しすぎると可読性が失われてしまうので注意しましょう。

# システム変数や関数との重複を回避する

また、よくあるのが、自分で定義した変数名・関数名がなでしこプラグインの変数名・関数名と被ってしまうことです。これを回避する簡単なテクニックがあります。

**「接頭辞」や「接尾辞」を付け加えることです。**

例えば、筆者が自作の関数名でよく使うのが「＊＊処理」という接尾辞です。なでしこ命令一覧を見ると分かりますが、末尾に「処理」という名前を持つ変数・関数は定義されていません。そのため、「＊＊処理」と書いてあれば、「自作のプログラム内でうちうちで使っている関数だな」と類推できます。

例えば、何かを表示する関数を定義したいとします。しかし「表示」という命令が既にシステムで定義されています。そこで「表示処理」という名前の関数を定義するという具合です。

```表示処理.nako3
●(Sを)表示処理とは
　　　「＊＊＊{S}＊＊＊」と表示。
ここまで。

「あいう」を表示処理。
```

また、「Ｆ＊＊＊」などのローマ字一字の接頭辞を付けることもあります。「Ｆ個数」や「Ｌ値段」などの変数名が他と被ることはまずありません。自分なりに「Ｌ＊＊＊」は関数内で使うローカル変数として使うとか、用途を決めておくと間違いが減ります。



# 分かりやすい代入文は？

日本語プログラミング言語ならではの悩みですが、なでしこでは、代入文を異なる書式で使うことができます。以下のような形式で記述可能です。

```代入文.nako3
変数名＝値 
変数名は値
変数名は値である
変数名に値を代入
```

日本語の文章として見ても、どの書き方でも意味が通じます。

 - [(参考)なでしこ3 > 文法/代入文](https://nadesi.com/v3/doc/index.php?%E6%96%87%E6%B3%95%2F%E4%BB%A3%E5%85%A5%E6%96%87&show)

上記の中でちょっと使い勝手が異なるのが「代入」を使った方法でしょう。下記のように助詞を入れ替えることで、変数名と値を書く順番を入れ替えることもできて利便性が高いと言えます。

```代入文-代入.nako3
リンゴ値段に300を代入。
300をリンゴ値段に代入。
```

もちろん、上記のような短い代入式で「代入」を使うのは問題ありません。

しかし、プログラムの冒頭で変数の初期化を一気に記述したい時など、代入のバリエーションをフルに活用して、いろいろな代入式を書くと、非常に読みにくいプログラムになってしまいます。

例えば以下のような変数の初期化文の連続は少し読みにくいものです。

```読みにくい初期化式.nako3
# 各種変数の初期化
0.1を消費税率に代入。
割引率は0.2。
会員特別割引に0.05を代入。
```

そこで、以下のように代入式の書式を合わせるとプログラムがスッキリします。

```初期化式の代入方法を揃える.nako3
# 各種変数の初期化
消費税率=0.1
割引率=0.2
会員特別割引=0.05
```

美しいプログラムとは完結で読みやすいプログラムです。わざと詩的にしたり、冗長な言い回しを入れる必要はないのです。

# 積極的に読みやすい新しい書式を使おう

なお、なでしこ3では、なでしこ1よりも、日本語として読みやすい関数定義が可能となっています。
なでしこ1では、関数定義は以下のように書く必要がありました。

```なでしこv1互換の関数書き方.nako3
●表示処理(Sを)
　　　「***{S}***」を表示。
ここまで。
```

これに対して、なでしこv3ではより日本語らしい書き方が可能です。

```なでしこv3の関数の書き方.nako3
●(Sを)表示処理とは
　　　「***{S}***」を表示。
ここまで。
```

# くれぐれもインデントを忘れない

なでしこ1では、インデントがブロックを表すので、大きな意味を持っていました。これに対して、なでしこ3では、インデントが崩れた文でも問題なく実行できます。掲示板などに書き込んだプログラムが時々スペースが失われてしまうことがあるのですが、それでも動くようにと配慮したものです。

**しかし、プログラムを見やすくする上でインデントは重要な要素です。**

構文を正しくインデントすることを忘れないようにしましょう。以下、FizzBuzzと呼ばれる有名な問題を解くプログラムですが、インデントがないと、「繰り返す」文と「もし」文がどのように対応しているのかさっぱり分かりません。

```インデントのないプログラム.nako3
Nを1から100まで繰り返す
もし、(N%3=0)かつ(N%5=0)ならば
「FizzBuzz」と表示。
違えば、もし、N%3=0ならば
「Fizz」と表示。
違えば、もし、N%5=0ならば
「Buzz」と表示。
違えば
Nを表示。
ここまで。
ここまで。
```

正しくインデントすることで、分かりやすいプログラムになります。

```インデントのあるプログラム.nako3
Nを1から100まで繰り返す
　　もし、(N%3=0)かつ(N%5=0)ならば
　　　　「FizzBuzz」と表示。
　　違えば、もし、N%3=0ならば
　　　「Fizz」と表示。
　　違えば、もし、N%5=0ならば
　　　　「Buzz」と表示。
　　違えば
　　　　Nを表示。
　　ここまで。
ここまで。
```

 - [参考： マイナビ連載21回目/真剣にFizzBuzz問題を解いてみよう
](https://news.mynavi.jp/article/nadeshiko-21/)

# まとめ

以上、簡単に、なでしこで分かりやすいプログラムを書くテクニックをまとめてみました。
日本人にとって分かりやすい、読みやすいプログラムを書ける「なでしこ」の魅力を最大限発揮させましょう。
いずれも難しいテクニックではないので、分かりやすいプログラムを書けるよう、心がけましょう！