Kotlinの初心者向け問題2-7:プロパティを理解しよう
この問題を解くために必要な知識:
【レベル1の知識】
コメントの書き方、変数と定数、基本データ型、算術演算と論理演算、入力と出力、import文、配列、分岐処理(if、if~else、when)、繰り返し処理(for、while、do~while)、Null安全、スマートキャスト
【レベル2の知識】
関数の定義と呼び出し、関数の戻り値、関数のオーバーロード、ラベルとジャンプ、例外処理、クラスの定義と使用、インスタンス、コンストラクタ、プロパティ、クラスの継承、クラスの拡張
<<前の問題 | 問題集Top |
次の問題>> |
Kotlinの文法「プロパティ」とは
ここではプロパティの意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。
Kotlinでは、クラスを使用してオブジェクトを作成する際に、データを保持するための変数を「プロパティ」と呼びます。
プロパティは、クラスの状態を表現し、クラス内で操作されるデータの保持場所となります。
プロパティの理解は、オブジェクト指向プログラミングを学ぶ上で非常に重要です。
プロパティとは?
プロパティは、クラス内に定義される変数で、オブジェクトの特性を表現します。プロパティには2種類あります:
val
:読み取り専用のプロパティ(値を変更できない)var
:読み取り・書き込みが可能なプロパティ(値を変更できる)
プロパティには「ゲッター」や「セッター」と呼ばれるメソッドが自動的に生成され、値の取得や変更時にそれぞれが呼び出されます。
ゲッターはプロパティの値を取得する役割を持ち、セッターは新しい値を設定する役割を持ちます。
Kotlinにおけるプロパティの書き方
Kotlinでプロパティを定義する際には、クラス内でval
またはvar
を使用します。次に、プロパティの名前とその型を指定します。
プロパティの定義例
class Person(val name: String, var age: Int)
上記の例では、Person
クラスに2つのプロパティが定義されています。
name
はval
で定義されているため、読み取り専用であり、オブジェクトが生成された後は変更できません。age
はvar
で定義されており、オブジェクトが生成された後でも値を変更できます。
ゲッターとセッター
Kotlinでは、プロパティに対してデフォルトのゲッターとセッターが自動的に生成されます。
val
の場合はゲッターのみ、var
の場合はゲッターとセッターの両方が生成されます。
これにより、特に何も記述しなくても、プロパティにアクセスして値を取得したり設定したりすることができます。
プロパティの使用例
実際のコードを使って、プロパティの定義と使用方法を見てみましょう。
class Person(val name: String, var age: Int) { fun introduce() { println("こんにちは、私は$nameです。年齢は$age歳です。") } } fun main() { // Personクラスのインスタンスを作成 val person1 = Person("Alice", 25) // プロパティの値を使用 person1.introduce() // varで定義されたageプロパティの値を変更 person1.age = 26 println("${person1.name}の新しい年齢は${person1.age}歳です。") }
このコードでは、Person
クラスのインスタンスperson1
を生成し、introduce
メソッドでname
とage
プロパティを使用して自己紹介をしています。
age
プロパティはvar
として定義されているため、person1.age = 26
のように値を変更することが可能です。
また、name
プロパティはval
として定義されているため、値を変更することはできません。
5. まとめ
Kotlinにおけるプロパティは、クラスが保持するデータを管理するための基本的な仕組みです。
val
を使って変更不可のプロパティを定義し、var
を使って変更可能なプロパティを定義します。
ゲッターやセッターはKotlinによって自動的に生成され、簡潔で読みやすいコードを作成することができます。
プロパティの理解は、Kotlinを使用して効率的にプログラムを構築するための重要なステップです。
Kotlin練習問題2-7:プロパティを理解しよう
小さなショップの商品の管理システムを作成しましょう。
各商品は名前、価格、在庫数を持っています。この情報を管理するために、Product
クラスを作成してください。
この問題の要件
以下の要件に従ってコードを完成させてください。
Product
クラスを作成し、以下の3つのプロパティを持たせてください。name
(商品の名前、文字列型)price
(商品の価格、整数型)stock
(在庫数、整数型)
- コンストラクタを使って、
name
、price
、stock
の初期値を設定できるようにしてください。 - メイン関数で、以下の3つの商品のインスタンスを作成し、それぞれのプロパティに以下の値を設定してください。
りんご
: 価格150円、在庫数50個みかん
: 価格50円、在庫数100個バナナ
: 価格120円、在庫数30個
- 最後に、各商品の名前、価格、在庫数をコンソールに出力する関数を作成し、全ての商品情報を表示してください。
ただし、以下のような実行結果となること。
----- ↓出力される結果の例↓ -----
商品名: りんご, 価格: 150円, 在庫数: 50 商品名: みかん, 価格: 50円, 在庫数: 100 商品名: バナナ, 価格: 120円, 在庫数: 30
----- ↑出力される結果の例↑ -----
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.Product
クラスの定義
1-1. name
、price
、stock
のプロパティを持つProduct
クラスの定義
1-2. コンストラクタの定義により、name
、price
、stock
の初期値を設定できるようにする
2.displayInfo
メソッドの定義
2-1. Product
クラスの各プロパティを表示するためのdisplayInfo
メソッドの定義
2-2. println
を使用して、商品の名前、価格、在庫数を表示
3.main
関数の定義
3-1. Product
クラスのインスタンスを3つ作成
3-1-1. apple
インスタンスの作成(商品名: りんご、価格: 150円、在庫数: 50個)
3-1-2. orange
インスタンスの作成(商品名: みかん、価格: 50円、在庫数: 100個)
3-1-3. banana
インスタンスの作成(商品名: バナナ、価格: 120円、在庫数: 30個)
3-2. 各商品の情報を表示する
3-2-1. apple.displayInfo
を呼び出して商品の情報を表示
3-2-2. orange.displayInfo
を呼び出して商品の情報を表示
3-2-3. banana.displayInfo
を呼び出して商品の情報を表示
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
// Productクラスを定義 class Product(val name: String, val price: Int, var stock: Int) { // 商品情報を表示する関数 fun displayInfo() { /*【穴埋め問題1】 ここに商品の名前、価格、在庫数を表示するコードを書いてください。 例えば、商品名: りんご, 価格: 150円, 在庫数: 50 のように出力します。 */ } } fun main() { // 3つのProductオブジェクトを作成 /*【穴埋め問題2】 ここにProductオブジェクトを作成するコードを書いてください。 例えば、val apple = Product("りんご", 150, 50) のように作成します。 */ // 各商品の情報を表示 /*【穴埋め問題3】 ここに各商品のdisplayInfoメソッドを呼び出して情報を表示するコードを書いてください。 例えば、apple.displayInfo() のように呼び出します。 */ }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
********************
// Productクラスを定義 class Product(val name: String, val price: Int, var stock: Int) { // 商品情報を表示する関数 fun displayInfo() { println("商品名: $name, 価格: ${price}円, 在庫数: $stock") } } fun main() { // 3つのProductオブジェクトを作成 val apple = Product("りんご", 150, 50) val orange = Product("みかん", 50, 100) val banana = Product("バナナ", 120, 30) // 各商品の情報を表示 apple.displayInfo() orange.displayInfo() banana.displayInfo() }
********************
正解コードの解説
クラスの定義
class Product(val name: String, val price: Int, var stock: Int)
このコードは、Productというクラスを定義しています。Kotlinでは、クラスはclass
キーワードを使って定義します。Productクラスは、3つのプロパティを持っています:
- name: 商品の名前(文字列型)
- price: 商品の価格(整数型)
- stock: 商品の在庫数(整数型、変更可能)
val
は値が変更できないプロパティ(読み取り専用)を定義し、var
は値を変更できるプロパティを定義します。
displayInfoメソッドの定義
fun displayInfo() { println("商品名: $name, 価格: ${price}円, 在庫数: $stock") }
この部分は、商品情報を表示するためのメソッド(関数)を定義しています。fun
キーワードを使って関数を定義します。displayInfo
関数は、商品の名前、価格、在庫数を表示するためにprintln関数を使用しています。
$name
,${price}
,$stock
のように、変数を文字列の中で参照することで、動的に内容が置き換わります。
main関数の開始
fun main() { val apple = Product("りんご", 150, 50) val orange = Product("みかん", 50, 100) val banana = Product("バナナ", 120, 30)
main
関数はKotlinプログラムのエントリーポイントです。この関数内で、Productクラスのインスタンス(オブジェクト)を作成しています。例えば、apple
は「りんご」という商品を表し、価格は150円、在庫は50個です。
各商品の情報を表示
apple.displayInfo() orange.displayInfo() banana.displayInfo()
ここでは、各商品のdisplayInfoメソッドを呼び出して、商品の情報を表示しています。displayInfo()
は前述のメソッドであり、呼び出されると商品情報がコンソールに出力されます。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。