日本語プログラミング言語「なでしこ」 Advent Calendar 2023
閲覧ありがとうございます。この記事はなでしこアドカレの11日目の記事となります。
10日目の記事はがうら かすみさんの「なでしことGoogle Siteで、ちょっと便利なページをつくる」でした。
JavaScriptの代わりになでしこ3でHP作ってみたいな……とぼんやり考えていたのでとてもタイムリーな記事でした。読みながら頑張って作ってみたいと思います!
「お久しぶりです」と表示する
去年のアドカレを読んでくださった方はお久しぶりです。そうでない方ははじめまして。ユメミノウツツと申します。
去年のアドカレではなでしこだっつってんのにLuaMacrosが大半を占める記事を書いたり、乱数プラグインの記事を書いたりしました。
今年はタイトルの通り、ビジネスメールでFizzBuzzをする記事を書きます。何言ってんの? ……まあまあ、読んでみてください。
FizzBuzzとは?
まさか今更説明する必要もないとは思いますが、少しだけ説明しておきます。
FizzBuzzというのは「その数字が3で割り切れるとき『Fizz』、5で割り切れるとき『Buzz』、3でも5でも割り切れるとき『FizzBuzz』、どちらでも割り切れないときはその数字を出力する」というプログラムのことです。このプログラムを1から100まで連続して出力することが多いです。
FizzBuzzは分岐(もし)、ループ(回)を必要とするため、プログラミング言語の勉強の例題としてよく採用されます。
今回はビジネスメールっぽい文体でFizzBuzzを作ろうという記事です。やっぱり何言ってんの?
実際にご覧いただこう
前置きはここまでにして(ビジネスメールの説明はいりませんよね?)、早速作ったプログラムを見ていただきましょう。貯蔵庫のリンクはコチラです↓(記事読む前に一度実行してもらえると嬉しいです!)
// 件名
// 【株式会社はくもくれん】受講申請を受け付けました
// To
// fujiharu555@*****.**.**
// BCC
!「https://n3s.nadesi.com/plain/business_email_library.nako3」を取り込む
藤原はる様
此度は実践コースにお申し込みいただきまして、誠に有難う御座います。
藤原様は過去に弊社のご利用経験がおありと伺いました。
前回:
もし過去に藤原様が入門コースにご参加くださったならば、:
配布資料をお渡しいたします。
こちらのフォームをご記入ください。
もし過去に藤原様が標準コースにご参加くださったならば、:
添付資料をよくお読みください。
もし藤原様が初のご利用でございましたら:
情報を修正いたします。
お電話にて藤原様の会員番号をお伝えください。
弊社は藤原様の良きパートナーになれるよう努めてまいります。
藤原様は弊社の大切なお客様です。
弊社は藤原様のご活躍をお祈りしております。
株式会社はくもくれん
// このプログラムはフィクションです。実在する人物・団体には一切関係ありません。
どうやら、藤原はるさんがはくもくれんという会社のプログラミングコースに申し込んだみたいです。このメールはその返信メールのようですね。
あ、藤原はるさんは完全に架空の名前で実在する人物とは一切関係ありません。株式会社はくもくれんもです。一応ね。
では、このプログラムをなでしこ3で実行してみましょう!
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
...
はい、見事にFizzBuzzすることができました! おめでとうございます!!
どういうこと?
解説パートです。
まあ見ていただければなんとなく想像がつくかと思いますが、このプログラムの全てはBCCのライブラリ取り込みにあります。ここだけは、どうしても隠せませんでしたね……。
ライブラリの中身を見てみましょう。
!インデント構文
る様=0
実践コース=15
誠=0
過去=0
弊社=0
ご利用経験=0
おあり=0
前=100
入門コース=3
配布資料=0
こちら=0
フォーム=「Fizz」
標準コース=5
添付資料=「Buzz」
初=0
ご利用=0
情報=0
お電話=0
会員番号=0
良きパートナー=0
ご活躍=0
くもくれん=0
●(Aに)お申し込むとは、
戻る。
●(Aに)有難う御座いますとは、
戻る。
●(AにBのCがDと)伺うとは、
1で戻る
●(AにBがCに)ご参加とは、
もし、B%C=0ならば、
1で戻る。
違えば、
0で戻る。
●(Aを)お渡しとは、
戻る。
●(AのBを)ご記入とは、
Bを継続表示して戻る。
●(Aを)よくお読みとは、
Aを継続表示して戻る。
●(AがBのCで)ございましとは、
もし、(A%3=0)または(A%5=0)ならば、
0で戻る。
違えば、
1で戻る。
●(Aを)修正するとは、
戻る。
●(AにてBのCを)お伝えくださいとは、
Bを継続表示。
●(AのBに)なれるよう努めるとは、
Aで戻る。
●(Aで)まいりますとは、
Aで戻る。
●(Aの)大切なお客様とは、
「」を表示
A+1で戻る。
●(AのBを)お祈りするとは、
戻る。
●(Aを)おりますとは、
戻る。
たくさんの変数定義と関数定義、それとインデント構文の宣言を書いています。(ライブラリでインデント構文を宣言しても呼び出し側には影響ないはずです。普段インデント構文使わないのに、なんでだろ?)
なでしこは単語の区切りを助詞で見ています。そのため「AをBで○○する」といった日本語らしい文を書くことができるのですが、その代わり変数や関数名に助詞を使うことができないという大きな欠点があります。例えば、「なでしこ」は助詞「で」が入っているため、「な」で「しこ」という2つの単語だと思われてしまい、エラーを吐きます。
今回のプログラムはそれを逆手に取ったソースコードになっています。
最初の変数「る様」を見るとその意味が分かりやすいかと思います。そう、「藤原はる様」というのは「藤原」という変数に「る様」という変数の値を代入する文だったのです!
その後の文も大体、意味のない変数と何もしない関数を連文で繋ぎ、それっぽい文章に仕立てています。
前回より先は、こっそりインデント構文ともし~ならばを使ってFizzBuzzをしています。「入門コース」が3、「標準コース」が5、「実践コース」が15で、「フォーム」がFizz、「添付資料」がBuzzとなっていました。
……あれ、FizzBuzzは? いえいえ、ご安心ください。なでしこには継続表示という関数があります。継続表示は使うたびに文字列をストックして、表示を実行したときにこれまでの文字列を全て出力するという関数になっています。このプログラムでは普段最初に15で割る代わりに継続表示を使い、最後の「大切なお客様」で一括して表示するようにしています。(じゃあ実践コースの15、いらないじゃん!w)
もちろん、株式会社はくもくれんも、「株式会社」という変数に「くもくれん」を代入しています!
元ネタ
ビジネスメールFizzBuzzには元ネタというかインスパイア元があります。それが「あたし、FizzBuzz」というなでしこで作られたプログラムです。
どうやら2009年に作られたコードのようで……なかなか古いですが、ぜひ一度見てみてください。
これはあたし彼女という、独特の語り口調で有名なケータイ小説が元ネタになります。それで、あたし、FizzBuzzはあたし彼女っぽい文体で書かれたなでしこのFizzBuzzプログラムなのです。
これを初めて読んだとき感激しまして。すんげー綺麗!! これはなでしこじゃないとできないコーディングだっ!! って。それで、私もなでしこ3で同じようなものを作ってみたいと思い至ったのです。
また、雪乃 雫さんのお嬢様コーディングにもとても刺激を受けました。やっぱり日本語プログラミング言語なでしこをやっている身として、いかにも普通の日本語らしいソースコードを書いてみなきゃ損でしょ!! と強く思いましたねw何もしない関数を定義してごまかすとかの技法も参考にさせていただきました。
反省会
あたしFizzBuzzはなでしこ(1)で書かれていますが、なでしこ1と3ではいくらか文法も変わってます。関数の引数に初期値を与えられなくなったり、インデント構文がオプションになったり……。そのためプログラムにどうしてもセミコロンが入ってしまいました。プログラム内にインデント構文と書くのもどうにもダサいですからね(ライブラリ取り込みは行ってるけど、ネ……)。
それと、本家あたしFizzBuzzは隠し変数が6つ、関数が3つしか定義されていません。それに比べて私のライブラリは山ほどいらない変数・関数を作っています。エレガントじゃないなぁ~~~というのが振り返ってみての反省点です……。
とはいえども、実はこのコード、1日足らずで突貫で作ったコードなのです。サークルのLT会で発表するためになんかなでしこで作るか……って突貫で作ったコードの割にはちゃんと動くし面白いコードができたいんじゃないかな、と思っています。もっと練る時間があれば綺麗なコードになったのか? というと、正直微妙な気がしますね。ライブラリやインデント構文の!をソース下側に固めて、もう少し綺麗にできたかもしれませんが、できてその程度でしょう。
ということもあって、ビジネスメール、FizzBuzzは私の中でもお気に入りのプログラムですwサークルの人の反応もよかったし、満足です!
ここまで
今回はなでしこ3でビジネスメールっぽいソースコードを書いてみました。実際に実行してFizzBuzzする代物を作れたので、私としては満足です。
このソース、実は連文だったり、継続表示、プラグイン、インデント構文、助詞の仕様だったりとなでしこじゃないとできないことが盛沢山なんですよね。ビジネスメール、FizzBuzzはなでしこじゃないと作れませんでした。なでしこ、最高!
さて、現在時刻は12/11の0:26、つまり当日0時の公開に! 間に合っていません! 遅くなってしまいスミマセン……でもでも、当日中に公開しているのでいいということにしてください←オイ
ということで、今回の記事はこの辺りで締めたいと思います。皆さんもぜひ変な文体のソースコードを作ってみてください!
以上、ユメミノウツツがお送りしました! またね~!