💻

【エンジニア初学者】プログラム言語の基礎

に公開

本記事では、プログラミング言語の基礎を中心に解説していきます。特に、JavaJavaScriptKotlinTypeScriptといった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など) 非同期処理が得意。Promiseasync/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