のんびりした人の日記 -24ページ目

のんびりした人の日記

仕事の愚痴とアニメ関連のことを書いていきます。

今日は朝から遠出して友達のライブを見に行きました。

「HOT SPRING LIVE vol.2」というイベントです。

場所は結構ちっちゃいところだったけど、大いに楽しませてもらいました。

ジャンルがみんな違ったし、やっぱ人によってどんな歌詞になるかとか、どんな曲調になるかとか全然違うんだなぁ、と。


もちろん我が友もちゃんと出てましたよ。

高校の時に聴いた曲もあって非常に懐かしくもあり、あのときよりすごくなったなぁと感じました。

まぁ、途中の禁煙の歌は結構おもしろかったですけどw


こういうライブは初めて行ったのですが、本当に楽しかったです。しかも今回のイベントは無料でしたし。

あれなら正直なところお金取っても別に問題はないと思いますね。

というか初めてであんなに面白いイベントの行けたのは本当に幸運でした。

また、情報が入ったら行ってみたいなぁ。

今日は本当に楽しかったです。今回演奏してくれた方々には本当にこれからもがんばってほしいです。応援しています。

タイトルには何も意味はありませんw

ただ明日(実質的には今日)は友達・・・・・・というか元カノのライブを見に行ってきています。

初めてちゃんとしたところで歌うのを聴きに行くのでかなり楽しみです。

あっちはめっちゃ頑張っている感じがかなり伝わってくるので。

僕は・・・・・・どうなんでしょうね。

正直、公認会計士になりたいという気も最初の4分の1程度ぐらいになってしまいましたからね。


なにか、明日がいい刺激になればいいと思っています。

けど、本当に楽しみだなぁ。絶対かっこいいだろうなぁ。

今回のネタは「オーバーロード」です。
Javaにも出てきたあれです。けど、僕は結構用語には無頓着だったので正確には覚えていないのです。
なので、今回を機に用語についてもちゃんと学習しておこうと思います。

オーバーロードというとメソッドのオーバーロードがまず頭に浮かびますね(僕は特にそうです)。
けど、オーバーロードというのはメソッドだけでなくコンストラクタにも使われるものなのです。Javaとかやっているひとにとっては「んなもんあたりまえじゃ」という感じでしょうね。



まずは用語から。
オーバーロードとは、同じ名前のメソッドまたはコンストラクタでも、仮引数の宣言が異なる場合には同じクラスに同じ名前の複数のメソッドまたはコンストラクタを持つことができることをいいます。
これは独習C#の言い回しをアレンジしてみました。まぁ、ただ合わせただけなのですがね。
んで、とりあえずポイント。まずはメソッドのオーバーロードについて。
①メソッド名は同じだけど仮引数の個数や型が1つでも異なる
②戻り値については同じでも異なっていてもどちらでもいい
かなり大雑把に言うと「メソッド名が同じもので、しかし仮引数の型とか数がまったく同じメソッドはだめ」というところですかね。
まぁ、仮引数の型とか数がまったく同じだとそのメソッドを宣言する意味というのはあまりない気がしますけどね。
そして、あとは実際にプログラムを実行したときには、仮引数に何が指定されているかによってコンパイラが自動で該当するメソッドを選択してくれるということです。
もし該当するメソッドがないときには、暗黙的に型変換が行われてまたコンパイラさんが該当するメソッドを選択してくださいます。
コンパイラさんはかなり優秀な方なのですね。恐れ入ります。
そんで、前にやったrefとoutについても関係していて、メソッド名が同じで仮引数の型および数が一緒のメソッドで、片方にrefでもう一方にoutが付いてるメソッドはだめです。
refとoutの違いだけではオーバーロードはできないようですね。これは気をつけておかないといけませんね。
メソッドをオーバーロードできるようにした理由というのが、「同じ処理についても仮引数について異なる部分があったときには、別々のメソッド名を付けてメソッドを定義しないといけない」ということがあったかららしいです。
別々のメソッド名を付けた場合には、どのメソッドがどんな動作をするかをより覚えないといけないですもんね。同じ処理をするのに名前を覚えないといけないとか面倒すぎますよね。
そんなわけで、「仮引数が違っても処理が同じならメソッド名も同じにしたほうがよくね」ということでこのような機能が追加されたわけらしいです。
けど、これなら結構作業的には楽にはなる感じですよね。



お次。コンストラクタのオーバーロード。
これも要点はメソッドの①と同じです。
・コンストラクタ名は同じ(当たり前)だけど仮引数の個数や型が1つでも異なる
コンストラクタをオーバーロードする一般的な理由というのは「あるオブジェクトのインスタンスを使ってあるオブジェクトのほかのインスタンスを初期化できるようにすること」らしいです。
これは初めて知りました。よくほかの入門書とかには「引数にそのクラスのオブジェクトも指定できる」とか何とか書いてあったけど、「そんなんして意味あるんかな」とか思っていましたから。実際には意味があるのですね。
そして、このような方法は効率的で結構使われているとか。なんか、初期化用のインスタンスを最初に生成しておいて、初期化したいときにはそれを引数にぶち込む感じなのかな。このインスタンスは初期化以外には使わないとか。
そんで、これもよく出てくるthisキーワード。
これはあるコンストラクタから別のコンストラクタを呼び出すときに使われる省略用のもの、といううろ覚えの知識があるのですが(あっていますかね?)。
けどなんか・・・・・Javaとは記述の仕方が違う!!なんかコンストラクタと仮引数の()があってそのあとに「:this(実引数)」みたいな感じになってる!これは、NA☆N☆ZO☆YA!!
thisのあとの()には仮引数かと思いきや実引数だし。
けど、考え方はメソッドのオーバーライドと同じですね。それと同様に考えていけばいい感じです。
つまり、this(実引数たち)とするとほかのコンストラクタで実引数たちの型および個数に適合するコンストラクタを今回もコンパイラ(かな?)が探してくれて、それをまず呼び出してくれるという感じですね。そんで、this(実引数たち)のコンストラクタの処理の後に本体のほうのコンストラクタの処理を行ってくれるという感じでしょうかね。
・・・・・Javaはこんなことできたかなぁ。っまいっかw
thisを使用してほかのコンストラクタを呼び出すメリットとしては
①コードの重複を避けること
②暗黙のデフォルト引数をもつコンストラクタを作成できること
です。デフォルト引数がわからん人は独習C#を買ってください。なんせこの日記は自分の勉強用なのですからw



さて、今日はこんぐらいにしておきますか。

なんか、著作権についてうるさく書いているので、少しそれ対策みたいなことをしておきますかね。


引用および参考:独習C# ハーバード・シルト著