プログラミング言語「なでしこ」で湯婆婆する

## この記事は

[Takuto Wada](https://twitter.com/t_wada/status/1333621209594904577?s=20)氏が先日弊社内で開発者向けに講演を行ってくださった。その中で得た気づきを端的に昇華してみようという動機による投稿です。
私の気付きとは端的に

- 英語(語学)・筋トレ・コーディング は「世界3大『裏切らない』」であり、続けることが大事、彼(彼女)らは裏切らないということ。
- 毎年少なくとも言語を1つ学ぶ、異なるパラダイム・文化の言語を選び学ぶことによってキャリアにも仕事に使う言語にも良い影響を与える。
- 「巻き込まれ駆動開発」。継続は難しい。巻き込まれるのが簡単。

### なぜなでしこ

[日本語プログラミング言語「なでしこ」 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/nadesiko) を発見し「なでしこ」を学ぶことで日本語文化に基づいたと考えるプログラミング言語で何か良い影響を得られるのか考えてみたいと思いました。
[15周年記念らしい](https://jp-pro.net/nade/event/15th-nadesiko/)。私の社歴より短い。思想を知って純粋に言語そのものを楽しんでみようと思います。

### 目標

令和のHello Worldと言えば湯婆婆。[なでしこ3で湯婆婆を実装してみる](https://qiita.com/kujirahand/items/995c4c182b2b511632da) がすでにあったが、ヒントになってしまうかもしれないのでなるべく見ないで、でも2020を締めくくるにふさわしい題材なので私も湯婆婆に挑戦する。[日本語プログラミング言語「なでしこ」Advent Calendar 8日目に参加。](https://qiita.com/advent-calendar/2020/nadesiko) というわけで巻き込まれ駆動開始。

## まず結論

まだまだ拡張が必要そうで、学習用の面が強いのではとおもわれ実用的ではない印象。しかし日本語でプログラミングするという行為、これは英語圏の人はこんな気持ちでプログラミングしているのだろうかという発見だった。マイナーな言語を使うとこんな書き方も知らないなんて恥ずかしいな～という呪縛から逃れられるので、怖がりにもおすすめ。

普段のjavaやらの脳が根本から覆されるようでアハ体験に違いないが、むしろこのなでしこ構文に従って日々のメールを書いたら、日本語も論理的で非常にコミュニケーションがスムーズになったりするのでは、などと言う気づきを得ました。


## インストール ～ こんにちは世界

[https://nadesi.com/top/](https://nadesi.com/top/)

[v1系とv3系があるらしい](https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%93v1%E3%81%A8%E3%81%AE%E4%BA%92%E6%8F%9B%E6%80%A7)。[なぜ、なでしこには、v1とv3があるの？](https://nadesi.com/top/index.php?%E3%81%AA%E3%81%9Cv1%E3%81%A8v3%E3%81%8C%E3%81%82%E3%82%8B%E3%81%AE%3F)
弊社プロダクトっぽいなと思わなくもなかったが一旦最新版v3にする。v2はどこ行ったんだろう。
[ブラウザ版](https://nadesi.com/doc3/)とやら。

[Web簡易エディタ](https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF)。

```
「こんにちはではありますまいか」と言う。
```
```
「こんにちはではありますまいか」と言うねん。
```

以上がソースコード。いずれでも以下となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/bd0897b2-fa13-c44c-f261-24d3b9fb0e80.png)


## 日付型渋いね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/fd246cd1-c36d-6988-408d-5fd93f0ae0a5.png)
というか英語圏でプログラミングしている人の脳内は、こんな感じなのだな。

## 文法を確認
https://nadesi.com/doc3/index.php?%E6%96%87%E6%B3%95
### [変数](https://nadesi.com/doc3/index.php?%E5%A4%89%E6%95%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

```
値段は3000
値段を表示。

値段＝3000
値段を表示。

値段に3000を代入。
値段を表示。
```
いずれでも結果は `3000`

```
3000
3000
3000
```
となる。


```
価格=500
個数＝3
税率=0.08
合計額=価格×個数
税額＝合計額×税率
支払い＝合計額＋税額
「お支払いは、{支払い}円です！」と表示。
```

```
お支払いは、1620円です！
```

## これがコマンドリファレンス
これだけあればできるかも。
https://nadesi.com/doc/cmd-func.htm

## さてJavaで湯婆婆
[Javaで湯婆婆を実装してみる](https://qiita.com/Nemesis/items/c7192a7c510788d2cba2) に従い仕様を確認。

```湯婆婆（抜粋）.java 
System.out.println("契約書だよ。そこに名前を書きな。");

System.out.println("フン。"+name +"というのかい。贅沢な名だねぇ。");

System.out.println("今からお前の名前は"+newName+"だ。いいかい、"+newName+"だよ。分かったら返事をするんだ、"+newName+"!!");
```

### [尋ねる](http://nadesi.com/man/index.php?%e5%b0%8b%e3%81%ad%e3%82%8b)

```
「契約書だよ。そこに名前を書きな」と尋ねる。
それを表示。
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/714c82ea-4ac0-685c-aaec-e59e19fc6258.png)

```
「契約書だよ。そこに名前を書きな」と尋ねる。
それを名前に代入。
名前を文字列分解。
それを配列シャッフル
それの1から1文字抜き出して新しい名前に代入。
新しい名前を表示。
```


## こんな感じ？
```
「契約書だよ。そこに名前を書きな」と尋ねる。
それを名前に代入。
「フン。{名前}というのかい。贅沢な名だねぇ。」と言う。
名前を文字列分解。
それを配列シャッフル
それの1から1文字抜き出して新しい名前に代入。
「今からお前の名前は{新しい名前}だ。
いいかい、{新しい名前}だよ。分かったら返事をするんだ、{新しい名前}!!」と言う。
```
[簡易エディタ](https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF) で確認してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/0cfa2312-ca1c-01f2-8f59-9c891756bf44.png)

＊「マツコdeluxe」でデバッグしているのは全角・半角文字を含めたいかつ贅沢な名前だからです。

## 感想

所要時間1時間強くらいだっただろうか。
[日本語プログラミング言語なでしこは2020年、15年目を迎えます。この15年目で初めてなでしこが来年度(令和3年)の技術の教科書に採用されました！](https://nadesi.com/top/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%93%E3%81%8C%E6%95%99%E7%A7%91%E6%9B%B8%E3%81%AB%E8%BC%89%E3%81%A3%E3%81%9F%E4%BB%B6) らしい。確かにこれでプログラミング始めると楽しいかもしれないです。

今年は[1人アドベントカレンダーを続けていますが](https://qiita.com/advent-calendar/2020/mba)ほかにも楽しい題材を見つけ書いていきたいと思います。