お嬢様コーディングとはなんですの?
以前、このような記事が話題を集めていらっしゃいましたの。
C++のマクロという機能をお使い遊ばしているとのことでございましたわ。
「こちらのfib様は引数としてnをお受け取りになって次のことをなさいます」
なんとエレガントな言い回しでしょう!
わたくし、たいへん感銘を受けましたのよ。
それで、わたくしもやってみることにしましたの。
なでしこさまは、もともと日本語。
ちゃちゃっと出来るに違いありませんことよ。ねえ、じいや。
そう簡単ではございませんの
「失礼ながらこの爺が思いますことには――」
「なんですの? じいや」
「ご承知かとは思いますが、なでしこは『日本語プログラミング言語』であって日本語ではないのですぢゃ」
「知ってますわ」
「自然言語では無い以上、意味さえ通れば動くというものではないのですぢゃ」
「おーっほっほっほ。とーぜんですわ! わたくしの言葉は、意味さえ通ればなどという下賤で醜悪な物言いとは全く違いますの」
「いやいやいや、そうではなくっ。なでしこにはなでしこの文法というものがございまして、それを逸脱いたしますと、たとえ日本語としては美しくとも、たちまちエラーを吐きまするのですぢゃ」
「まあ、嫌な」
思いっきり顔をしかめるお嬢様。
「まったく、じいやったらはしたないこと! せめて、嘔吐なさるとおっしゃい」
「そっちですか。つまり……えー、文法的に誤りがあるということを……お示しになる、わけですぢゃ」
ともかくやってみましたの
「ようするに、ふぃぼなっち数を求めるぷろぐらむ、なのですぢゃな」
指一本で超高速にキーを叩くじいや。
「まあ、驚いた。こんな隠し芸があっただなんて。じいやは、コンピューターおじいちゃんだったのですわね」
「フフ、それほどでも……ありますが。どうです、はやりのインラインインデント構文も使ってみましたぢゃ」
10のfibを表示。# 55
●(nの)fibとは:
もし、(n=0)または(n=1)ならば、nを戻す。
違えば、(fib(n-2)+fib(n-1))を戻す。
「これぞ、簡にして潔。ちゃんと日本語としても意味の通る、なでしこのプログラムになっていると思うのですぢゃ」
「ぶーですわ! 却下ですわ! もっと日本語っ! もっとえれがんとに~っっ、なのですわ!!!」
10のふぃぶ様を表示してください#まし。
●(nの)ふぃぶ様とは#次のことをなさいます。
もし、nと0が等しいなら、nを戻します#の。
もし、nと1が等しいなら、nを戻します#わ。
もし、そうでなければ、n-2のふぃぶ様とn-1のふぃぶ様を足して戻りまして#よ。
ここまで#ですわ。
「こっ、これでどうですの」
「日本語での演算は、なでしこの大きな特徴のひとつですから結構だとは思いますが……『ふぃぶ様』って。しかも『10のふぃぶ様を表示』って、もはや違和感しかありませんですぢゃ。なにも無理に擬人化しなくてもよろしいのでは」
「突っ込み所はそこですの?」
「いやはや。『#』のコメントが痛々しすぎて、もはや爺はなんとも……」
「キーッ! わたくしらしい語尾が、全てっ!! ことごとくっっ!!!]
[エラー][文法エラー]main.nako3(1行目): 不完全な文です。単語『くださいまし』が解決していません。
「『不完全』って何ですの。このわたくしが不完全だとでも?!」
ハンケチを噛みしめ、涙するお嬢様。
セバスチャン登場、ですわ!
「まことに僭越ながらお嬢様。こちらなどはいかがでしょうか」
10のふぃぶ様を表示してくださいまし。
●(nの)ふぃぶ様とは#次のことをなさいます。
もし、nと0が等しいなら、nを戻しますの。
もし、nと1が等しいなら、nを戻しますわ。
もし、そうでなければ、n-2のふぃぶ様とn-1のふぃぶ様を足して戻りましてよ。
ここまでですわ。
# おまじないでございます
●くださいまし。ここまで。
●の。ここまで。
●わ。ここまで。
●よ。ここまで。
●ですわ。ここまで。
「あら、動きましたわ。どうしてですの? それに……一体これはなんですの? セバスチャン」
「ただのおまじないでございます、お嬢様。どうぞお気になさいませんように」
「ぶーぶーぶー。子ども扱いは嫌ですわ。わたくしはもう、あんなことやこんなことも知っておりましてよ」
「おっ、お嬢様っ。なななんとはしたないことをっっ。そんな子にお育てした覚えはございませぬぅ~。爺は、爺は悲しゅうございますぢゃ~~~」
泣き崩れるじいや。
「あら、まだいたんですの、じいや。有能でイケメンなセバスチャンが来てくれたからには、じいやなんかポーイ、なのですわ」
「あ~れ~~、お嬢様あぁ~~~」(とんでった)
「ささ、セバスチャン。お邪魔虫は消えましたわ。もったいぶらずに、全てをさらけ出すのですわ! さあさあさあ!!」
「……では、あらためて。おまじないは、なでしこの敬語文法を参考にさせていただきました」
「ようするに『解決していません』となる単語を全て命令として定義することで解決させているわけです。何もしない命令でも、命令は命令でございますので」
関数定義は無理でしたの
「なるほどー。でもセバスチャン。コメントがもう一つ残っておりましてよ。これも、こうして、こうしたら……」
10のふぃぶ様を表示してくださいまし。
●(nの)ふぃぶ様とは次のことをなさいます。
もし、nと0が等しいなら、nを戻しますの。
もし、nと1が等しいなら、nを戻しますわ。
もし、そうでなければ、n-2のふぃぶ様とn-1のふぃぶ様を足して戻りましてよ。
ここまでですわ。
# おまじないを追加すればよろしいのですわ!
●次のことをなさいます。ここまで。
# おまじないでございます
●くださいまし。ここまで。
●の。ここまで。
●わ。ここまで。
●よ。ここまで。
●ですわ。ここまで。
「実行ですわ! ぽちっとな」
[エラー][文法エラー]main.nako3(2行目): 構文解析でエラー。『次に』の使い方が間違っています。
「あっ、こいつ、エラーをはきやが……っ、コホン。なでしこさまがエラーを嘔吐なさいましたわ!」
「こればかりはご勘弁を、お嬢様。まず、『次』は、逐次実行構文の予約語でして、命令で上書きすることも出来ないようなのでございます。また、『に』『と』『を』は助詞でございますので、最初の一文字以外で関数の中に含めることは出来ません。どこまでが助詞でどこからが命令か、分からなくなってしまいますので。さらに、なでしこの関数定義はこのような決まりになっております」
「行頭に『●』、カッコ書きで引数とそれに対応する助詞を指定、そして関数名。『とは』は省略できますが、これで一文が完結していなければならず、他に余計なものがくっついてはいけません。最低限「。」(句点)で閉める必要があります。マクロなる置き換えの裏技が無い以上、どうしてもこれは動かせません」
「なんか、言ってることがよく分かりませんわ~」
「……と言うわけですので、このくらいが限界ではないかと……」
10のふぃぶ様を表示してくださいまし。
●(nの)ふぃぶ様とは。下記のお仕事をなさいます。
もし、nと0が等しいなら、nを戻しますの。
もし、nと1が等しいなら、nを戻しますわ。
もし、そうでなければ、n-2のふぃぶ様とn-1のふぃぶ様を足して戻りましてよ。
ここまでですわ。
# 追加のおまじないでございます
●下記。ここまで。
●(Aの)お仕事。ここまで。
●(Aを)なさいます。ここまで。
# おまじないでございます
●くださいまし。ここまで。
●の。ここまで。
●わ。ここまで。
●よ。ここまで。
●ですわ。ここまで。
「ちなみに、助詞の入るところで命令を細切れにして、引数としてつないでいきます」
「むー……。マルが入ってしまうと、コメントの時と変わらないくらいエレガントではありませんわね。わたくし、あの華麗な関数定義文に憧れましたのに」(がっくし)
お嬢様レベルを積み上げるのですわ
「ところで✨」
急に気を取り直して目をキラキラさせるお嬢様。
「敬語を使うと『礼節レベル』が上がることになっているのですわね!」
「そのようです」
「わたしも! わたくしも、お嬢様レベルを上げたいですわ~✨ あっ、何も言わないで! これはわたくしにも分かりましてよ」
お嬢様レベルは0ですわ。
10のふぃぶ様を表示してくださいまし。
●(nの)ふぃぶ様とは。下記のお仕事をなさいます。
もし、nと0が等しいなら、nを戻しますの。
もし、nと1が等しいなら、nを戻しますわ。
もし、そうでなければ、n-2のふぃぶ様とn-1のふぃぶ様を足して戻りましてよ。
ここまでですわ。
お嬢様レベルを表示してくださいまし。
# 追加のおまじないでございます
●下記。ここまで。
●(Aの)お仕事。ここまで。
●(Aを)なさいます。お嬢様レベル=お嬢様レベル+1。ここまで。
# おまじないでございます
●くださいまし。お嬢様レベル=お嬢様レベル+2。ここまで。
●の。お嬢様レベル=お嬢様レベル+2。ここまで。
●わ。お嬢様レベル=お嬢様レベル+1。ここまで。
●よ。お嬢様レベル=お嬢様レベル+1。ここまで。
●ですわ。お嬢様レベル=お嬢様レベル+1。ここまで。
「お嬢様レベルの配点は、わたくしの独断と偏見ですの。そしてなんと! 全て5ゾロになるよう調整しているのですわぁ~✨」(えっへん)
「さすがでございます、お嬢様」
「ぬぅおおぉぉ~。知らぬ間にこんなにもご立派に成長遊ばされていたとわ~っっ。爺は、うれしゅうございまするるる~~~(感涙)」
「さささ、遠慮なさらなくてもよろしくってよ。じいやも早くこちらへ貼り付けて、お試しなさい、なのですわ! ゴーゴー! ゴーゴーゴー!! ですのよ~~✨」
プラグインにいたしますわ
「突然ですけれどもわたくし、神様の啓示を受けましたの。このおまじないをプラグインにして、広く下々の者にもこのエレガントなコーディングを普及させるのですわ!」
「簡単に言うと、なでしこさんで関数を定義するだけ、なのですわ☆ ほんとにカンタンですわね」
「お待ちください、お嬢様。このおまじないですが、汎用的に使う場合には一つ注意しなければならないことがございます」
「なんですの?」
「たとえば……」
1と2を足す。
それを表示。# 3
「これは当然、計算結果の3が表示されます。ところが……」
1と2を足してくださいまし。
それを表示。# ""
●くださいまし。ここまで。
「あら? 何も表示されませんわ! どうしてですの?!」
「なでしこでは、命令の返り値が『それ』に入ります。『1と2を足』した時の返り値は当然3なのですが、その後おまじないの『くださいまし』が空を返して、『それ』を上書きしてしまいます。JSプラグインですと返り値を戻すかどうかを設定できるようなのですが、なでしこの命令では返り値が明示されていない場合は自動的に、その関数内の『それ』が返ることになっているようでして」
「なんかよくわかりませんけど、困りますわね~」
「なでしこには、日本語らしく記述するために、第一引数が省略された場合に、自動的に『それ』を補完するという機能がございますので、それを利用してこのように……」
1と2を足してくださいまし。
それを表示。# 3
●(Aを)くださいまし。Aを戻す。ここまで。
「『それ』の内容を引き継いでいけばよろしいのです」
「おー、素晴らしいですわ! 早速それで書き直すことにいたしますですの」
1と2を足しますの。
それを表示。
●(Aを)の。Aを戻す。ここまで。
「これでよろしいのですわね? ポチッとな」
[エラー][文法エラー]main.nako3(3行目): 不完全な文です。単語『の』が解決していません。
「……って、またまたエラーですわよ! キーッ、不完全ってなんなんですの~っ!! セバスチャンと同じようにしたはずですのにぃっ!!!」
「どうやら……助詞に相当する語句からはじまる関数の場合、引数の定義は後ろに付けなければエラーとなるようです……」
1と2を足しますの。
それを表示。# 3
●の(Aを)。Aを戻す。ここまで。
「先に言ってくださいまし。プンプン、ですわ」
完成しましたわ!
「わたくし頑張りましたわ! 改訂に改訂を重ねて進化したおまじないを取り込んで作った最終形態がこれですの☆」
ごきげんよう。
もしよろしければ、0から20までのふぃぼなっち数列をご披露して差し上げますわ。
●(nの)ふぃぼなっち数さま。下記のお仕事をお願いいたしますわ。
もし、nと0が等しいのでしたなら、nを戻しますの。
もし、nと1が等しいのでしたなら、nを戻してくださいまし。
もしそうでなければ、nから2を引きました物のふぃぼなっち数と、nから1を引きました物のふぃぼなっち数を足して戻しますのよ。
ここまでですわ。
●(AからBまでの)ふぃぼなっち数列さま。下記のお仕事をお願いいたしますわ。
数列は空ですの。
数をAからBまで繰り返します:
数のふぃぼなっち数を数列に一行追加して差し上げまして、数列に代入いたしますのよ。
数列をお返しして戻ってくださいまし。
ここまでですわ。
セバスチャン!『https://n3s.nadesi.com/plain/ojyo-sama.nako3』を取り込んでくださいまし。
じいやがお嬢様レベル取得して、「このぷろぐらむのお嬢様レベルは{それ}ですぢゃ」と申し上げますぢゃ。
「おーっほっほっほ。どうです? どうですの?? 完璧ではございませんこと?! 十二分に賞賛してくれて構いませんですわぁ✨」
おわります
お嬢様……疲れるるる……💧
セバスチャンは、お嬢様に「クビよクビ!」と言わしめる毒舌執事にしようかと思ったのですが、なんかもう無理でしたw
このようにして作られた(嘘)おまじないは、プラグインとしてなでしこ貯蔵庫に公開されています。
他の方がCC0で発表された作品の中からも、いくつか良いアイディアを採用させていただいています。
プログラム中で、
!『https://n3s.nadesi.com/plain/ojyo-sama.nako3』を取り込む。
のように取り込むことで、だれでも使えますので遊んでみてくださいね☆
もし、他にも良い言い回しなど出来ましたら、是非発表してくださいまし。
また、これを参考にして、別の口調のプラグインなど作ってみるのも楽しいですね♪