LoginSignup
9
1

More than 5 years have passed since last update.

関数名の目的語を省略した場合

Last updated at Posted at 2018-04-03

動詞には be動詞 と 一般動詞 があり、一般動詞には 自動詞 と 他動詞 があります。
他動詞には目的語が必要です。
「○○を」に相当するのが目的語です。

英語で関数名を考えるとき、目的語に相当するものがあれば他動詞にするのが一般的だと思います。
目的語は引数になることもあるし、関数名に含まれることもあります。

// ファイルを開く
fileManager.open( file );

// キーワードを見つける
string.find( keyword );

// インジケーターを表示させる
view.showIndicator();

// 全プロセスを殺す
system.killAllProcesses();

しかし、他動詞を使いながら目的語を省略する場合もあります。
以下の関数名はどちらも目的語がありませんが、個人的には特に違和感がありません。

// ファイルを削除する
file.remove();

// ファイルリスト画面を更新する
fileListView.update();

世界の例

例えば、Swift の UIViewController には isEditing というプロパティーがありますが、目的語がありません。

同様に、Qt の QFile には remove という関数がありますが、引数(目的語)はありません。

Android の File にある deleteProcess にある destroy も同様です。

edit、remove、delete、destroy は全て他動詞です(たぶん)。
つまり目的語がなければ、英語として成り立ちません(たぶん)。

UIViewControllerisEditing は、[編集]ボタンをONにして、画面を編集モードにすると true になるフラグです。
つまり、編集しているのは画面(UIViewController)です。
removedelete の対象が File なのも、destroy の対象が Process なのも明白です。
目的語が省略されると、目的語は自分自身になっているようです。

推測

関数名には
「目的語が自分自身になる場合、他動詞でも目的語を省略できる」
というルールが適用できるのではないかと思っています。

上記の例は暗黙的に以下のように解釈されるのではないでしょうか。

// ファイルを削除する
file.removeItself();

// ファイルリスト画面を更新する
fileListView.updateItself();

と個人的には思っているのですが、このルールがどこかに書かれているわけではないので、推測の域を出ていません。

2018/04/07 追記

コメントでご指摘いただきましたが、C++の非静的メンバー関数には this が隠し引数として渡されます。
つまり上記の例は以下のように解釈できると思います。

// ファイルを削除する
file.remove( &file );

// ファイルリスト画面を更新する
fileListView.update( &fileListView );
9
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1