より英語っぽくコードを書きたい
こんな風にコードが書けたらおもしろそうだなと思うものを書いていきます。
思いついたら時々更新しようと思います。
「それもうあるよ」とか「昔そういうことしようとした人いた」とかあったら教えてください。
使役の概念を取り入れたい
コードを「アプリケーションの台本」、もしくは「アプリケーション内に存在する世界を叙述するもの」であると捉えるとオブジェクトが自発的に何かをするような形で記述されるのは納得ですが、「コンピュータに対する指令」であると捉えるなら、そこにオブジェクトたちを操る何者か(=アプリケーション内にいるコードを書いた人自身の分身/代理人)がいる様にコードが書かれていた方が自然ではないでしょうか。
こんなのどう?
void main() {
Person john = Person('John');
make(john).study(); // Studying now
let(john).play(); // Playing now
let(john).sleep(); // Good night...
}
class Person {
Person(this.name);
final String name;
void study() {
print('Studying now');
}
void play() {
print('Playing now');
}
void sleep() {
print('Good night...');
}
}
dynamic make(Object object) => object;
dynamic let(Object object) => object;
make()
もlet()
も引数をそのまま返すだけなので関数としての意味はありませんが、コードの意図が少しわかりやすくなったような気がします。
make
何かに何かをさせようとする時、make someone do something
の形にするのがいいんじゃないでしょうか。
1.toString();
は動詞すらないけど
make(1).toString();
だったら動詞があるし、整数1
が自発的に文字列になるのではなく自身以外の存在から文字列に"されている"/(動作の主体が1
自身であったとしても)変化"させられている"感が出てないですか?
let
JavaScriptのlet
と被るよなぁ。
TimeOfDay now = TimeOfDay.now();
TimeOfDay bedTime = TimeOfDay(hour: 21);
TimeOfDay wakeUpTime = TimeOfDay(hour: 7);
同じsleep()
でも
if (now.hour >= bedTime.hour) {
let(john).sleep(); // 寝る時間だったら寝てもいい
} else {
make(john).study(); // そうじゃなかったら勉強させる
}
と書けばjohn
は特定の条件下でないとsleep()
することが"認められない"ことが表現でき、
if (now.hour >= bedTime.hour) {
make(john).sleep(); // 寝る時間っだたら寝かせる
} else {
let(john).play(); // そうじゃなかったら遊んでもいい
}
このように書けばこのケースのsleep()
はjohn
の意思によって行われるものではないことがわかります。
簡潔にしたかったので日付をまたいでたら寝かせてもらえないようになってしまっているのは見逃してください。
コードに自然言語的な意味を持たせ過ぎるとかえって可読性・統一性が低下しそうですが、これくらいならありなんじゃないかなと個人的には思います。言うだけ言って試してないからわからないけど。
(今はとりあえずこれだけ。思いついたら足していきます。)
Discussion