Step1:【基礎編】Kotlin言語のキホンをマスターしよう!
はじめに
Kotlinの自己学習を進めるために、Geminiの学習コーチ機能を使ってカリキュラムを作ってもらいました。これが基礎から体系的に学べるとても良い教材だったので、このブログを通してシェアしていこうと思います。
ただGeminiが吐き出したものを書き連ねても、おそらく皆さんがGeminiに対して「Kotlinの学習プログラムを作って」というプロンプトを投げた結果と変わらないものになってしまいますので、私が感じた疑問をGeminiにぶつけたQ&Aも合わせて紹介していきます。
来年からは個人開発でAndroidアプリの作成に着手していきたく、その開発ログもブログで残せたらいいな~とも思っているので、Kotlinに関するブログ記事はだいぶ長く続きそうです、、、
これより”The Kotlin Programming Language”のことを”TKPL”と記述します。
Rustのバイブルとして有名な "TRPL" (The Rust Programming Language) へのオマージュです。
ちなみに↓がTRPLです。(Rustを一から学べる入門書で、"The Book"とも呼ばれています)
https://doc.rust-jp.rs/book-ja
TKPLのアウトライン
- ステップ1:【基礎編】Kotlin言語のキホンをマスターしよう!
サブトピック1-1:プログラミングの第一歩←今回はここ
サブトピック1-2:プログラムの流れを操る
サブトピック1-3:オブジェクト指向って何?
- ステップ2:【入門編】はじめてのAndroidアプリ開発
サブトピック2-1:開発環境の準備と初めてのアプリ
サブトピック2-2:アプリの画面を作ってみよう
サブトピック2-3:効率的なリスト表示
- ステップ3:【実践編】機能的なアプリを作るための応用技術
サブトピック3-1:データを保存する (Data Persistence)
サブトピック3-2:インターネットと通信する (Networking & Concurrency)
サブトピック3-3:画面遷移とアーキテクチャ (Navigation & Architecture)
Kotlin基礎解説:第1回 プログラミングの第一歩(1-1)
1. val と var による変数宣言
Kotlinにおける変数宣言は、valとvarの2つのキーワードで行います。
- val (value)
読み取り専用の変数を宣言します。一度初期化されると、再代入することはできません。Javaにおけるfinal修飾子が付与された変数に相当します。JSでいうところの”const”ですね
紛らわしいのが、Kotlinでは定数を宣言したい場合は”const val”を使います。 - var (variable)
再代入が可能な変数を宣言します。
いわゆる”変数”ですね。
// valは読み取り専用
val language: String = "Kotlin"
language = "Java" // コンパイルエラーが発生
// varは再代入可能
var version: Double = 1.9
version = 2.0 // 有効
Kotlinでは、可能な限りvalを使用することが強く推奨されています。これは不変性 (Immutability) を重視する言語設計の表れです。不変な変数は、意図しない状態の変更を防ぎ、コードの予測可能性を高めるため、特に大規模なアプリケーションや並行処理において重要な役割を果たします。
少し調べてみましたが、SwiftやRustやJS・TSなども同様に不変変数を使用することを推奨しています。
「不変な変数」ってなんか違和感ありますが、自分だけですかね???
色々な値が代入されるから変数なのでは???
2. 型推論と明示的な型宣言
Kotlinコンパイラは、変数が初期化される値からその型を自動的に判断する型推論 (Type Inference) の機能を備えています。これにより、多くの場合で型宣言を省略でき、コードを簡潔に記述できます。
val language = "Kotlin" // 型(String)は "Kotlin" という値から推論される
val version = 2.0 // 型(Double)は 2.0 という値から推論される
val language: String = "Kotlin" //型を明示的に宣言することも可能もちろん、他の言語と同様に型を明示的に宣言することも可能です。
その場合の構文は 「不変可変の指定 変数名 : 型 = 代入する値」となります。
3. Kotlinの基本データ型
Kotlinでは、数値、文字、真偽値などを扱うための基本データ型が提供されています。Javaと異なり、プログラマがプリミティブ型(例: int)とラッパー型(例: Integer)を区別する必要はありません。
| Kotlinの型 | 説明 |
| Int | 32ビット整数 |
| Long | 64ビット整数 |
| Double | 64ビット浮動小数点数 |
| Float | 32ビット浮動小数点数 |
| Boolean | True OR False |
| String | 文字列 |
これらはすべてオブジェクトとして振る舞いますが、Kotlinコンパイラはパフォーマンスを最適化するため、必要に応じてJavaのプリミティブ型へとコンパイルします。これにより、プログラマは型の意味論に集中することができます。
Kotlinのコンパイラが優秀なので我々は「プリミティブかラッパーか」を特に考えることなくコーディングができるんですね。
型推論もそうですが、Kotlinも含めた最近のコンパイラはめちゃくちゃ賢いですよね。
4. 学習中のQ&A
本トピックの学習を進めるうえで私がGeminiに対して投げた質問とそれに対する回答をまとめました。
今回は本当に初歩の初歩だったため、あまり疑問はありませんでした、、、
ほんの少しだけRustに触れたこともあったので、ここら辺の変数宣言などはスムーズに頭に入りました。
Q1:Javaと異なり、行末のセミコロンは不要なんですか?
Geminiの回答:原則として不要です。Kotlinでは改行が文の終端として解釈されるため、セミコロンを省略できます。これによりコードの視覚的なノイズが削減されます。
おまけ:実践編 – 環境設定での躓き、、、
実は、学習の最初にprintln()で日本語を出力しようとしたところ、ひどい文字化けに遭遇しました。実行構成のVMオプション(-Dfile.encoding=UTF-8)を設定したり、IDE全体のVMオプション、gradle.propertiesを修正したりと、様々な対策を試みましたが、私の環境では解決しませんでした。
これは非常に稀なケースのようですが、もし同じ問題に直面した方がいれば、「自分のコードが悪いわけではない」と安心してください。学習を進める上では、コンソール出力は英語にするか、この問題は一時的なものとして保留し、先に進むのが得策です。Androidアプリ本体のUIで日本語が文字化けすることはまずありません。
実際にAndroid Studioの機能で実際のスマートフォン画面を使った動作確認もしていますが、実際文字化けはしていません。
私は今後のことも考え、Android StudioというIDEを使用して学習を進めていますが、アプリ開発に進むまではブラウザ上で動きが確認出来るサイトを使った方が手っ取り早いと思います。
ブラウザ上で動かせるので環境変数の設定やJVMの設定など特になにも考えずに動かせるのでおすすめです。
https://play.kotlinlang.org←こちらです
5. まとめ
本記事では、Kotlinというプログラミング言語の基礎の基礎、変数について一緒に見ていきました。
- 変数宣言は、不変性を推奨するvalと、可変のvarを使い分ける。
- 型推論により、冗長な型宣言の多くを省略できる。
- プリミティブ型とラッパー型の区別がなく、統一された型システムを持つ。
次回はプログラミングの基本「分岐・反復」そして関数について一緒に学んでいければと思います。
コメント