目次
APIとは何なのか?
APIは、A=Application、P=Programming、I=Interfaceの略で、システムが提供する機能や、外部のライブラリを使用するためのインターフェースを指します。
JavaでのAPIは、クラスやインターフェースの形で提供されています。アプリケーション開発者は、APIで提供されているクラスのメソッドを呼び出し、必要な機能を利用します。
例えば、Javaの学習初期で学ぶ、「Hello World」の文字を画面に出力するプログラムも、”System.out.println”というJavaの標準APIを使用します。
System.out.println("Hello World");
細かいことはAPIにまかせて本質的なことに集中
Javaの開発では、さまざまなAPIを利用してプログラムを作成するのが一般的です。すでに用意されているAPIを活用することで、無駄なコードを減らし、本質的な作業に集中できます。
例えば、テキストファイルにデータを出力するプログラムで考えてみます。もし何のAPIも使用せず、1から全て作ろうと思うと、OSとの細かいやり取りなどすべて自前で実装する必要があり、おそらくコード量にしたら、数千〜数万行になるでしょう。
ファイルを扱うクラスは、Javaの標準APIに既に用意されており、これを使えばたった数行でプログラムを作ることも可能です。
APIを積極的に利用して、細かい事は全部APIにまかせて、本質な作業に集中しましょう。
あなたもJavaのAPI開発者
API開発者と言われると仰々しいですが、あなたがJavaのクラスやメソッドを作ったことがあれば、それもJavaのAPIです。
さらに、それがチームのメンバーが使う為の共通メソッドであれば、それは立派なJavaのAPIで、あなたもJavaのAPI開発者です。
APIを作ったらJavadocコメントを書こう
せっかくAPIを作っても、その使い方が分からなければ意味がありません。作成したクラスやメソッドにJavadocコメントをしっかり書いて、APIの利用者に使い方を説明しましょう。Javadocの書き方は以下の記事で解説していますので、こちらもご覧ください。
【関連記事】
▶初心者でもわかる!Javadocの意味と書き方【サンプルあり】
Javaでよく使うAPI(リスト編)
ここからは、Javaでよく使うAPIについて紹介します。
List
Listは、0~始まるインデックスを使用して、複数の値をまとめて管理する時に使用します。
import java.util.ArrayList; import java.util.List; public static void main(String[] args) { //Listインターフェイスを実装したArrayListを生成 List<String> list = new ArrayList<>(); //要素を2つ追加 list.add("Apple"); list.add("Google"); //Listの内容をコンソールに出力 System.out.println("1つの要素:" + list.get(0)); System.out.println("1つの要素:" + list.get(1)); }
Map
Mapは「キー」と「値」を使用して、複数の値をまとめて管理する時に使用します。
import java.util.HashMap; import java.util.Map; public static void main(String[] args) { //Mapインターフェイスを実装したHashMapを生成 Map<String, String> map = new HashMap<>(); //要素を2つ追加 map.put("item1", "value1"); map.put("item2", "value2"); //Mapの内容をコンソールに出力 System.out.println("item1=:" + map.get("item1")); System.out.println("item=2:" + map.get("item2")); }
Javaでよく使うAPI(日付編)
Calendar
Javaでの日付操作は、Calendarクラスを使います。うるう年を考慮した日付の加減算など、便利なメソッドが揃っています。
【現在日時を取得】
//現在日時で、Calendarのインスタンスを取得 Calendar cl = Calendar.getInstance();
【日付の加算】
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); Calendar cl = Calendar.getInstance(); //カレンダーの日付を、2019年9月1日に設定 cl.set(2019, 8, 1); //日付を2日加算する cl.add(Calendar.DATE, 2); //コンソールに計算結果を表示 System.out.println(sdf.format(cl.getTime()));
Javaでよく使うAPI(ファイル編)
ファイルの読み込み
ファイルの読み込みには、FileReaderクラスを使用します。次のサンプルコードでは、パスで指定したファイルの内容を読込み、コンソールに内容を出力しています。
import java.io.File; import java.io.FileReader; import java.io.IOException; public static void main(String[] args) throws IOException { //読み込むファイルを指定 File file = new File("path/to/dir/sample.txt"); //FileReaderクラスを生成する FileReader reader = new FileReader(file); //ファイルから1文字ずつ読み込む int data; while ((data = reader.read()) != -1) { System.out.print((char) data); } //ファイルクローズ reader.close(); }
FileReaderクラスは、ファイル読込の基本的なクラスで、他にも文字コードを指定してファイルを読むFileInputStreamクラスや、高速にファイルを読み込む為のBufferedReaderなどがあります。興味がある方は色々調べてみて下さい。
ファイルの書き込み
Javaでファイルに書き込むには、FileWriterクラスと、PrintWriterクラスを使用します。
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public static void main(String[] args) throws IOException { // FileWriterクラスを生成する FileWriter file = new FileWriter("path/to/dir/sample.txt"); // PrintWriterクラスを生成する PrintWriter pw = new PrintWriter(new BufferedWriter(file)); //ファイルに文字列を書き込む pw.println("Apple"); pw.println("Google"); //ファイルを閉じる pw.close(); }
APIは進化する
Javaの標準APIは、Javaのバージョンが上がるたびに進化します。例えば、Java8で追加されたStream APIとラムダ式では、配列やリストの操作が劇的にシンプルになりました。
次の例は、リストの要素から偶数の要素を抽出するサンプルコードです。Java7以前の方法と、Java8で追加されたStream APIを使った方法をコードを比較してみましょう。
【Java7以前の方法】
//1~6までの値をリストに格納 List<Integer> list = Arrays.asList(new Integer[] {1, 2, 3, 4, 5, 6}); //偶数の要素を格納するリスト List<Integer> result = new ArrayList<>(); //1件ずつ要素が偶数か判定し、偶数の要素をresultに追加する for (int i = 0; i < list.size(); i++) { if (list.get(i) % 2 == 0) { result.add(list.get(i)); } } //結果をコンソールに出力 for (Integer integer : result) { System.out.println(integer); }
【Java8以降のStream APIを使った方法】
//1~6までの値をリストに格納 List<Integer> list = Arrays.asList(new Integer[] {1, 2, 3, 4, 5, 6}); //listから偶数の要素のみを抽出 Stream<Integer> result = list.stream().filter(n -> n % 2 == 0); //結果をコンソールに出力 result.forEach(n -> System.out.println(n));
上の例の通り、Stream APIでは、リストや配列に関する処理がシンプルで直観的に書けるようになっていることが分かります。
JavaのAPIは進化するため、一度覚えたら終わりではなく、もっと便利なAPIが追加されていなか、新しい情報には常に目を向けておきましょう。
廃止されたAPIには注意
Javaのバージョンが上がると、先述したように新しいAPIが追加されますが、古いAPIが削除されることもあります。APIが廃止候補になることがアナウンスされたら、そのAPIは使用しないようにしましょう。