こんにちは、月子です。
「月子の勉強シリーズ」略して「つきべん」!
第4弾はapplication programming interface、略して「API」についてです。
それでは勉強する前の私に、APIとは何か聞いてみましょう。

コードを書くときに、便利になるやつ
雑っ
会社に入社したときに、「30、25、73、54,、93を小さい順に並び替えよ」という問題が出ました。
この問題、私は数字を格納した配列を作り、for文を2回まわして、色々頑張ってゼイゼイ出しました。
しかし後日、
int[] a = {30,25,73,54,93}; java.util.Arrays.sort(a); for(int i : a) { System.out.println(i); }
これで簡単に数字を並び替えられることが分かりました。

もっと早く知りたかった!
私がAPIに触れた初めての瞬間でした。
今日はこの便利なAPIを勉強し、まとめていきたいと思います。
実は色々な場所に使われているAPI
はじめに私は、「java.util.Arrays.sort」が、初めて触れたAPIだと言いました。
あれは…嘘です。
私は入社するまえ、プログラミングスクールに通っていました。
ここで初めて打ったのが、
System.out.println("Hello,World!");
実はこれにもAPIが使われているんです。
ここでAPIの種類についてみていきましょう。
API | 内容 |
java.lang | Javaに欠かせない、重要なクラス群 |
java.unil | Javaを便利にしてくれるクラス群 |
Java.math | 数字に関するクラス群 |
Java.net | メットワーク通信を行うためのクラス群 |
Java.io | ファイルの読み書きに関するクラス群 |
先ほど、打ったコードに使われているのは、
「java.lang」に含まれている「system」です。
実はこの出力もAPIの一種なんですね。
APIはインポートしないと使えない
インポートについてはこちら
例えば、現在の日時を調べたいときは、
「java.until.Date」クラスが便利です。
import java.until.Date; public class Main{ ・・・
こんな風に書くこともできます。
import java.until.*; public class Main{ ・・・
2つ目は、「java.until」に当てはまる全てのクラスが使えます。

こっちの方が便利!
開発側はそう思いますが、コードを初めてみる人にとってはどうでしょう?
import java.until.*; の場合

どこかに、APIが使われてるんだな
import java.until.Date; の場合

Dateのクラスが使われてるんだな、分かりやすい!
見る側にとっては、詳細を記した方が親切です。
インポートするときは最後まで書くように意識しましょう。
インポートしなくても使えるjava.lang

あれ?でもsysoutだけのコードで、インポートってしてなかったような…
そうです、「java.lang」のクラス群はよく使うので、インポートせずとも使えるようになっています。
多いな〜〜〜〜〜
String,system,Integer,StringBufferなどなど、いろんなクラスがあります。
私が書いているコード1つでも、いろんな先人たちが作ったクラスの上で成り立っているのですね。
StringBuilderについて分かりやすく説明してみた
StringBuilderというクラスがあります。
「StringBuilderは内部に連結した文字列を蓄えるメモリ領域(バッファ)を持っています」
…よし、カビゴンに例えます。
※カビゴン;ポケモンの一種。食いしん坊。
メモリ領域については以前、記事にもまとめました。
newして新しいインスタンスを作ると、
左下にいるJVM君がマンションの部屋を借りてくれます。
前回はint型で試しましたが、今回はString型で試します。
String str = "こんにちは";

String型の部屋を確保するのね〜〜
おっけーstrのために2000〜2009番地を用意したよ〜!
※int型は4バイト消費するので、4部屋確保しました。しかしString型はどのくらい消費するのか、自身でも調べたり、コードを打ったりしたのですが、「128974848」バイトとかちょっとよく分からない数字が出たので、今回は分かりやすく「10部屋」にしています。すみません。
ここに、文字列を足したとしましょう。
String str2 = str + "月子です";
するとメモリではこんな動きをします。
つまり元あったString型を捨てて、新しい部屋に丸ごと引っ越すんですね。
これをString型インスタンスの不変性と言います。
数回ならまだしも、何百回も+をするとどうなると思いますか?

部屋をたくさん確保してる…もう疲れた…
つまり、JVMへの負荷がすごすぎて、処理がめっちゃ遅くなります。
ここで役に立つのがStringBuilder…つまりカビゴンです!
StringBuilder sb = new StringBuilder();
こう宣言すると、JVMはこんな動きをします。

行けっ、カビゴン!2000番地に行くんだ!
※例えです
2000番地に行ったカビゴンは、そこで寝ています。ここでString型の食べ物を与えましょう。
StringBuilder sb = new StringBuilder(); sb.append("りんご"); sb.append("バナナ"); sb.insert(3,"国産牛"); //3文字目に国産牛を挿入 String sb2 = sb.toString(); //カビゴンの腹の中を見る System.out.println(sb2);
結果は「りんご国産牛バナナ」です。
アドレスを見ると、こんな動きをしています。
カビゴンは元いた部屋にいたまま、String型を食べて、大きくなっていきます。
カビゴンは一匹のままです。
部屋を新しく確保しなくてもいいので、
+を使うよりも、JVMの負担が大きく減ることになります。
APIとはStringBuilderとは、まとめ
・Java.lang以外はインポートする必要がある
・StringBuilderはカビゴンのように追加すると、メモリをそのまま大きくしてくれる
まさかStringBuilderをカビゴンで例える日が来ると思っていませんでした。
ある意味、天才かもしれない、ある意味…
APIを学んでいると、私が何気なく打っているコードが使えるのは、
IQ53万くらいある先人たちが作ってくれたクラスがあるおかげなんだと知ることができました。
APIを上手に使えば、美しいコードが書くことができます。
本当に様々なAPIがあるので、今度調べてまとめてみようと思います!
お読みいただき、ありがとうございました!
マジで参考にさせていただきました!敬礼!↓
\ いろいろやってるよ! /
よわよわエンジニアのブログ:月子.log
雑多な発信をしてるツイッター:@moon_trdr
ゆるーーーい絵日記:@tuki__tukiko
欲しいものリスト 公開しています🌸
「鈴木 月子」宛に届けていただけると泣いて喜びます!
(送っていただいた方の名前・住所は匿名で送られますのでご安心ください♪)
***
派遣から正社員として、内定をもらいました!
【未経験からエンジニアになりたい人、おすすめのプログラミングスクール】
(コロナの影響で、オンラインでの無料説明会で案内しています)
1、GEEK JOB
私が通っていたプログラミングスクールです!
1番のメリットは、
無料の転職サポート&プログラミング教育を受けられることです!
私もGEEKJOBで転職サービスを受けて、入社しましたが、
最初から最後まで完全に無料でした。
プログラミングできるかな・・・と不安な方は、
最初は無料の説明会と体験会もあるので、
お試しで行くのも1つの手ですよ♩
「有料でもいいから手厚いサポートを受けたい」という方は、
私も大好きなマコなり社長が経営しているTECH::EXPERTをおすすめします!
なんと、質問し放題の環境が整っています。
未経験エンジニアとしての経験談なのですが、
質問できる環境ってありがたいですし、なにより成長ができます!
相談会や説明会は無料です。
DMMが開催しているプログラミングスクールです。
こちらは有料ですが、条件を満たすことで
支払った教育訓練経費の最大70%が教育訓練給付金として支給されます。
こちらも相談は無料です。
無料・有料どちらがいいかは体感だと、
有料の方がサポートが手厚い傾向です(当たり前ですよねw)
しかし無料だから適当というわけではないですし、
私のように転職を繰り返してお金がない人からしたら、
無料スクールはすごくありがたい存在でした🎵
無料スクール→自主的に勉強できる人・お金がない人
自分にあった方を選んでくださいね^ ^
コメント