【エンジニア初学者】プログラム言語の基礎
本記事では、プログラミング言語の基礎を中心に解説していきます。特に、Java、JavaScript、Kotlin、TypeScriptといったWebやアプリ開発でよく使われる言語にフォーカスして、それぞれの違いや特徴、使いどころなどを紹介します。
そもそもプログラミング言語とは
プログラミング言語とは、コンピュータに「こうしてほしい」と命令を伝えるための言葉です。
私たち人間が話す日本語や英語のように、コンピュータにも理解できる“言語”が必要になります。それが、JavaやJavaScript、Kotlinなどのプログラミング言語です。
プログラミング言語にはたくさんの種類があり、それぞれ得意分野や使用される場面が異なります。
JavaとJavaScriptの違い
JavaとJavaScript、名前は似ていますが、実はまったく別の言語です。初心者の頃はこの2つの違いがとても混乱しやすいポイントです。
以下の表で違いを整理してみました。
項目 | Java | JavaScript |
---|---|---|
主な用途 | Androidアプリ、企業向けシステム、サーバー開発など | Webページの動的操作(UI、アニメーションなど)、非同期通信など |
型の扱い | 静的型付け(変数に型を明示する必要がある) | 動的型付け(実行時に型が決まる) |
実行形式 | コンパイル型:一度バイトコードに変換しJVMで実行 | インタープリタ型:ブラウザが直接読み取り実行 |
実行環境 | JVM(Java Virtual Machine)上で動作し、OSに依存しない | Webブラウザ(ChromeやFirefoxなど)やNode.jsなど |
処理速度 | 高速。あらかじめコンパイルされているため | やや遅めだが、近年はかなり高速化されている |
非同期処理 | 基本は同期だが、非同期も可能(RxJavaなど) | 非同期処理が得意。Promise やasync/await を使用 |
補足
Javaは、堅牢でスケーラブルなアプリケーションを作るのに適しており、大企業の基幹システムなどにも多く使われています。
JavaScriptは、Webブラウザで動作し、ユーザーとのインタラクション(ボタンを押す、ページをスクロールするなど)を制御するのが得意です。
Kotlinの基本
Kotlinは、Javaと高い互換性を持ちながら、より簡潔でモダンな記述が可能な言語です。特にAndroidアプリ開発で現在主流になっています。
ここではKotlinの基本をいくつか紹介します。
変数と定数の宣言
var name = "Taro" // 値を変更できる
val age = 20 // 値を変更できない(定数)
-
var
は「変更可能な変数」 -
val
は「変更不可能な変数(定数)」です。
基本的にはvalを優先して使い、「本当に変更が必要な場合のみvarを使う」という方針が推奨されています。
基本データ型と関数
fun greet(name: String): String {
return "Hello, $name!"
}
- データ型の例:
Int
(整数)、Double
(小数)、String
(文字列)、Boolean
(true/false) - 関数は
fun
キーワードで定義します。
コレクション(リスト)
val fruits = listOf("Apple", "Banana") // 不変リスト
val colors = mutableListOf("Red", "Blue") // 可変リスト
colors.add("Green") // 要素追加可能
-
listOf
: 中身を変更できないリスト -
mutableListOf
: 中身を追加・削除・変更できるリスト
原則として、不変のコレクション(listOf) を優先的に使用するのが推奨されています。
Null安全(Null Safety)
Kotlinでは、null(値が存在しないこと)を安全に扱うための仕組みが整っています。
var name: String? = null // nullを許容する変数
println(name?.length) // セーフコール(nullならnullを返す)
println(name ?: "Unknown") // エルビス演算子(nullなら代わりの値)
-
?.
:セーフコール演算子 -
?:
:エルビス演算子 -
!!
:非null断言演算子(多用注意) -
let
:スコープ関数:nullでないときだけ処理を実行
遅延初期化(lateinit)
lateinit var username: String
-
lateinit
を使うと、変数の初期化を後回しにできる(ただしnull不可の型のみ) - 初期化せずに使うと例外が発生するため注意
companion object(静的メンバー)
class User {
companion object {
const val MAX_USERS = 100
}
}
println(User.MAX_USERS)
Javaのstatic
のような役割で、インスタンスを作らずにアクセスできます。
data classと@NoArgsConstructor
data class Person(val name: String, val age: Int)
-
data class
:データの保持に特化したクラス -
@NoArgsConstructor
:引数なしのコンストラクタを自動生成する(MyBatisなどで利用)
TypeScriptと型安全性
TypeScriptは、JavaScriptに型の概念(型注釈)を追加した言語です。JavaScriptとの互換性を保ちつつ、バグの発見や可読性の向上を図れます。
型指定の例
let message: string = "Hello, world!";
let count: number = 42;
let isValid: boolean = true;
- 型を明示することで、間違った使い方をするとコンパイル時にエラーが出るので安心
型推論も可能
let name = "Taro"; // 自動でstring型と判断される
関数の型注釈
function add(x: number, y: number): number {
return x + y;
}
関数の引数や戻り値に型を指定できるので、開発中のバグを早期に発見しやすくなります。
まとめ
言語 | 特徴 | 主な用途 |
---|---|---|
Java | 安定・堅牢・高速 | Androidアプリ、企業向けシステム |
JavaScript | 軽量・柔軟・即時実行 | Webページの操作、UI制御 |
Kotlin | Java互換・簡潔・Null安全 | Androidアプリ開発 |
TypeScript | JavaScript + 型の安心感 | 大規模なWebアプリ、保守性の高い開発 |
フィードバック歓迎です
誤りや改善点があれば、ぜひコメントやフィードバックをいただけると嬉しいです。
Discussion