IT エンジニアを目指して

自分の考え・メモ・その他もろもろを書いていきます.Emacs / プログラミング / ネットワーク / 技術書 に関する記事が多いと思います.

ジェネリックってなんだろう

Table of Contents

  1. 広辞苑: generic
  2. プログラミング: Generics

広辞苑: generic

  1. 属名

  2. 全般に関する,総括的な,一般的な (<=> specific); 総称的な.

  3. ノーブランドの; 商標登録されていない <薬・商品など>

プログラミング: Generics

同じプログラムコードで様々なデータ型のデータを処理できるようにするもの.

http://e-words.jp/w/%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AA%E3%82%AF%E3%82%B9.html 静的型付け言語では関数やメソッドを定義する際に受け取る引数のデータ型を決定して記述しておかなければならず、異なるデータ型に同じ処理を行うコードが必要な場合は内容がほとんど同じで引数の型だけが異なる関数などを必要な型の数だけ用意して呼び分けなくてはならない。

ジェネリクスを用いると、引数の型の情報を引数として渡すなどの方法で、あらかじめ特定のデータ型に決め打ちせずに処理内容を記述することができる。

Java 的には … 汎用的なクラスやメソッドを特定の型に対応づける機能のこと.

  public class Box<T> {

      T o;

      public Box(T o) {
          this.o = o;
      }

      public T get(){
          return o;
      }
  }

  Box<Integer> b = new Box<Integer>(new Integer(123));
  Integer i = b.get();
  System.out.println(i);

T の部分で (動的に) 型宣言をしてあげることによって, Integer 用, String 用, Long 用の Box … のようにそれぞれ定義していく必要がなくなる.

  1. コードミスが発見しやすい (コンパイルエラーを吐いてくれるから)
  2. 扱っている型が明確で,可読性 UP

といった利点があるらしい.

調べた限りだと静的型付け言語特有の機能の様子. つまり,動的型付け言語 (特にオブジェクト指向言語) では,これらのことを自動的にやっているということなのだろうか.