本ページはプロモーションが含まれています

IT全般

会話で学ぶプリミティブ型

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィールはこちら

プリミティブ型って、intとかbooleanとかのことですよね。

でも正直「最初に習うやつ」以上の意味を考えたことがなくて。

その感覚は正しい。

プリミティブ型は「最初に習う」し、「最後まで付きまとう」。

まずは言葉から分解しよう。

「プリミティブ(primitive)」の語源はラテン語の primitivus。

意味は「最初の」「原始の」「根源的な」。

原始的って、ちょっとバカにされてる感じしません?

そこが誤解の入口ですね。

原始的は「雑」ではなく、「これ以上分解できない」という意味だ。

物理で言えば原子。

料理で言えば塩。

哲学で言えば存在そのもの。

プリミティブ型は「データの原子」なんだ。

じゃあ「型(type)」は?

これも語源が面白い。

ギリシャ語の typos が由来で、「刻印」「型押し」を意味する。

つまり「型」とは

「このデータは、どういう形で、どう扱われるか」という設計図だ。

じゃあまとめると、プリミティブ型は?

定義してみよう。

プリミティブ型とは

「それ以上内部構造を持たず、言語や実行環境が直接理解できる、最小単位のデータ型」

ここで重要なのは

「最小」と「直接理解できる」。

直接理解できる?

CPUはオブジェクトを理解しない。

理解できるのはビット列だけ。

int は「このビット列を整数として解釈しろ」

boolean は「0か1として扱え」

double は「浮動小数点の規格(IEEE 754)で読め」

全部、機械との直結契約だ。

じゃあ String は?

多くの言語で String はプリミティブじゃない。

なぜなら「構造」を持っているから。

長さ、文字配列、エンコーディング、メソッド群。

これはもう「物体」だ。

だからオブジェクトになる。

Javaでいうと

int と Integer の違いも、ここにつながる?

まさに核心をついてるね。

int は「数そのもの」

Integer は「数を包んだ箱」

箱には

null も入る

メソッドも生える

ポリモーフィズムもできる

便利だが、

箱を開けるコスト(メモリ・参照・GC)が発生する。

だからパフォーマンスの話で

「プリミティブを使え」って言われるんですね。

そう。ただし理由は速いからではない。

「余計な意味を持たせない」からだ。

プリミティブ型は

・状態を持たない

・振る舞いを持たない

・文脈に染まらない

純粋な値だ。

哲学っぽくなってきましたね。

プログラミング言語は

数学・哲学・工学の合成物だ。

プリミティブ型は

「世界を最小の部品で説明しよう」という

人類の執念の名残でもある。

じゃあ最後に。

プリミティブ型って、結局なんのためにあるんですか?

答えはシンプルだ。

世界を、誤解なく、速く、安定して扱うため。

抽象化しすぎると世界は曇る。

分解しきると世界は見える。

プリミティブ型は

「考える前に、確定しておく前提」なんだ。

要点まとめ

primitive の語源は「最初の・根源的な」

プリミティブ型は「これ以上分解できないデータの原子」

CPUと直接契約しているため、高速で意味がブレない

オブジェクト型は「意味をまとった値」、プリミティブは「裸の値」

抽象化の土台として、今も不可欠な存在

プリミティブ型は地味だが、

すべての抽象の下に、黙って横たわっている。

  • この記事を書いた人
  • 最新記事

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィールはこちら

-IT全般