ファイル操作
CoddyのKotlinジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 1/57。
実際のプログラムは、複数のファイルに分割されています。Kotlin プログラムのすべての .kt ファイルはまとめてコンパイルされるため、あるファイルで宣言された関数やクラスは、import なしで同じパッケージの他のファイルから使用できます。
// Greeting.kt
fun greeting(name: String) = "Hello, $name!"
// Main.kt
fun main() {
println(greeting("Ada"))
}このプログラムを実行すると Hello, Ada! と出力されます。Main.kt の main が Greeting.kt にある関数を呼び出しているためです。
Kotlin ファイルには宣言のみを記述します。クラス、関数、プロパティなどです。println(...)のような文は関数内に記述する必要があります。プログラムはfun main()から開始します。慣例として、これはMain.ktに記述されます。
// Greeting.kt
fun greeting(name: String) = "Hello, $name!"
// println("hi") // error: 文は関数の中になければなりません
// Main.kt
fun main() {
val name = readLine() ?: "friend"
println(greeting(name))
}通常の構成では、1つのファイルにつき1つのクラスを配置し、クラスにちなんだ名前を付けます。Dog.ktにはDogが、Account.ktにはAccountが含まれます。このセクションの課題では、コードをそれらのファイルに記述し、Main.ktには用意された入出力コードが含まれます。通常、このコードは編集できません。エディターでは、各ファイルがタブとして表示されます。
Dog.kt // class Dog(...) { ... }
Account.kt // class Account { ... }
Main.kt // fun main(): 入力を読み取り、結果を出力する可視性はファイルにも適用されます。private としてマークされたトップレベル宣言は、それ自身のファイル内でのみ可視になります。一方、デフォルトの public は、すべてのファイルで可視にします。
// Secret.kt
private const val SALT = "x7" // このファイルだけがそれを見られる
fun hashed(s: String) = s + SALT
// Main.kt
fun main() {
println(hashed("pw")) // 問題なし: hashed は public
// println(SALT) // エラー: SALT は Secret.kt で private です
}チャレンジ
簡単このプログラムには2つのファイルがあります。Main.ktのmainは名前を読み取り、greeting(name)の結果を出力します。Greeting.ktのgreetingを完成させ、名前がAdaの場合はHello, Ada!を返し、名前が空の場合はHello, friend!を返すようにしてください。
コードはGreeting.ktに記述します。Main.ktには提供された入力/出力コードが含まれており、編集できません。
自分で試してみよう
fun main() {
// 提供された入出力コード: そのままにしておく
val input = generateSequence(::readLine).toList()
for (name in input) println(greeting(name))
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド