人の振り見て我が振り直せなどと申しますが、私は今、英語の5文型を改めて学び直す必要があると、ひしひしと感じています。
プログラムを書くときに5文型を意識すると命名規則(特にbooleanの)などが頭に入ってきやすいということで、中学や高校で習う5文型について学び直した内容を大雑把にまとめてみます。
私は慣習的な命名規則を理解するためには基本的にはインスタンスとメソッドを意識することが大事だと思っていますので、オブジェクト指向(もっというとサブジェクト指向)的な考え方を念頭に文型と絡めて解説を入れていきます。
以下、5文型に登場する略語は以下の通りです。
S: 主語
V: 動詞
O: 目的語
C: 補語
第1文型 SV
主語と動詞で文として完成してしまう型です。Vには自動詞が入ります。
例)exist
, live
, agree
, go
booleanを返すメソッドの命名などでexists
はよく使われるワードですね。
if (someInstance.exists()) {
// do something
}
1行目がif someInstance exists
となり、英語として意味が伝わる文になるためこのような命名が使われるのだと思います。existは自動詞なので目的語は取りませんし、isExistにもなりません。
副詞であれば続くことができるので、existsInXXX
みたいな命名はありだと思います。
第2文型 SVC
主語+動詞+補語の型です。代表例はbe動詞
です。
S = Cという関係になるとかよく説明されてますね。Cは形容詞だったり、名詞だったりします。
プログラミングの文脈でもこのS = C
という理解は重要です。なぜならこれまたbooleanの命名でisXXXという使われ方をするのがあるあるだからです。
if (someInstance.isC()) {
// do something
}
メソッドなどの場合はクラスのインスタンス = C
であるかどうかの判定をしてbooleanを返すような作りになるはずです。それ以外のものをCと比較してたらそれは文法的に言ってることとやってることが違うと気付きましょう。
第3文型 SVO
主語+動詞+目的語の文型です。SがOをVすると覚えましょう。
例) get
, create
, read
, update
, delete
ここだけRestAPIなどの例になりますが、HTTPメソッドは大体Oをとる動詞なので、URLをリソース、つまり目的語として動詞+目的語の形になるような設計思想となっています。
GET https://example.com/users HTTP/1.1
また、1文型でも登場した、be動詞ではない動詞で始まるbooleanパターンも存在します。このパターン、体感的にはhasとかcontainとかincludeとか所有系の3文型動詞が多い気がしますね。
if (someInstance.contains(specificItem)) {
// do something
}
第4文型 SVOO
主語+動詞+目的語1+目的語2の文型です。give me chocolate
ってやつですね。
例) give, send
何かに何かを渡す系の動詞でよく使われる印象です。
someInstance.give(object1, object2)
同じクラスから生成された2つのインスタンス間で何かを渡すような場面だとこのようなメソッドの設計になると思われます。ユーザ同士がアイテムを送り合うようなソーシャルゲームなど。
第5文型 SVOC
主語+動詞+目的語+補語の文型です。
例) make
, call
, name
重要なのは、O = C
の関係が成り立つこと。
あまり使うことはなさそうですが、デザイン次第ではあるクラスのインスタンスが別のクラスのインスタンスの状態を変えるようなときに使えるかもしれません。(その場合も状態を表現するプロパティにsetすればいい気もしますが)
classAInstance.make(classBInstance, complement)
最後に
以上となります。
我が振りを直すための学び直し記事なのでツッコミなど大歓迎です!!