プログラム言語におけるジェネリクスの意味が良く分かってなかったで、調べてまとめます。
まずはざっと、googleで調べる。
ざっと分かった事リスト
- ジェネリック=総称、汎用という意味
- データに依存しないプログラミング方式のこと
- 多くのオブジェクト指向言語に採用された
- 言語の機能としてはC++のテンプレート、C#のジェネリクス、Javaのジェネリクス、Haskellのタイプクラスなど
- 関数を使用する時や、クラスのインスタンスを生成する時に型を引数として渡す
- 例えばJavaのList<データ型>。
- ソースコードの可読性は下がるとも言われている
- JavaやC++のような静的型付け言語で、動的型付け言語の恩恵の一部を受けることができる。(個人的には、これは混乱を招きそう)
ざっとまとめ
- JavaのList<データ型>みたいなやつの事だよ。とか言われると一瞬で理解できる気がする。具体例がありがたい。
余談:goにはジェネリクスは無いが今後使いされるのかもしれない?
- 今はジェネリクスの他にもクラスが無いとかシンプルだけど、その辺追加されていくと今後は今のgoらしさ的なものは失われていく気がしなくもない。
参考
golang と Generics と吾 - Qiita
Go にジェネリクスがなくても構わない人たちに対する批判について - methaneのブログ
感想
- 具体例があると概念の理解が進む。
- ジェネリクスどうこうじゃないけど、新しいプログラミング言語を覚える時にその言語で「できない事」を早めに把握しておかないと効率悪くなりそうと改めて思ったり。
- さらにジェネリクス関係ないけど、goについて調べてみると、プログラミング言語戦争のようなものが垣間見えて怖い。
- 「ジェネリクスとほぼ同じ機能」とか「ジェネリクスもどき」といった表現がチラホラ見えるが、何のことなのかよくわからない。
- 「ジェネリクス分かった!」とか簡単に言ったら怒られそうな気持になり、IT業界から居なくなりたい気持ちになってくる。
以上。