日々常々

ふつうのプログラマがあたりまえにしたいこと。

オーバーロードの誤用の原因

オーバーライドオーバーロードの誤用について書いてみたけれども、これらが発生する原因は(主に初心者向けに)文言の意味のみが説明されているためだと思います。とゆーわけで、オーバーロードについて解説しているサイトを漁ってみた。文言の説明だけのところは似たり寄ったりなので、使い方、使い道を説明している部分にスポットをあててみる。
google:java オーバーロードとは

同じ登録を行う機能であるのに、メソッドをtoroku(String name,String  country)、torokuJapan(String name)などと作成するするのはあまりきれいなプログラムではありません。この場合、 toroku(String name)、toroku(String name,String country)というように同じ名前のメソッドを引数の数を変えて作成します。同じ機能を持つものは同じメソッド名とした方が、プログラムがきれいに見えます。

Javaの道:クラス(8.オーバーライドとオーバーロード)

目的がずれてしまっている気がする。同じ機能に対して同じメソッド名をつけるのがオーバーロード、と言うのはいいのですが、目的が「プログラムがきれいに見える」では駄目だろう。寧ろこの例ではメソッド名が違うほうがプログラム的には良いのでは無いかと思ったりもしてしまう。
どうでもいいけどオーバーライドとオーバーロードを同じページで説明している理由は、文字面が似ているから以外にあるのだろうか。

例えば、「変数が5つあって、殆どの場合は3つしか動かさない、例外的に残り2つも動かす」と言う場合、このメソッドを三つオーバーロードしておけば、通常は引数を三つだけ与えて、気が向けば5つ全部、或いは4つ与えればいいことになります。オーバーロードしないと、このメソッドを呼ぶたびに、5つ全部の引数を与えなければならず面倒です。

Java 入門 | オーバーロード

引数が3つ、4つ、5つのをそれぞれ作ったら、数は4つになるんじゃないかと思った*1メソッドを呼ぶ側の視点で書いているのは良いのですが、使うのも自分みたいな感じになってる。入門だから仕方ないのかな。


オーバーロードとは:SJC-P対策Java用語集
目的に関する説明がありません。確かに何のためにあるか、など知らなくても資格はとれますので、サイトの趣旨的にはばっちりなのかもしれません。そんな資格に何の意味があるのかは甚だ疑問ですが。


第1章:オーバーロード Java入門 (Java言語編) Accel Works
こちらも目的の説明はありません。System.out.println()が例で出されてるのが救い。


ƒI[ƒo[ƒ[ƒh
同様に文言の説明のみ。


検索結果の上から順番に見てみたものの、まず文言の説明ありきになっています。使い道に触れている所もあるものの、おまけ程度の扱いであって、オーバーロードが出来るからって何が嬉しいか、というのがピンと来ません。だから文言は知っているだけだったり、メソッド名つけるのが面倒な時に引数の数が違うから被ってても良い的な使われ方するんだろうなぁ。

*1:引数の型が全部同じなのかな。それはそれで順番入れ替わりのバグが潜む可能性があるので避けたほうがいいと思ってる。