Kotlin練習問題2-7:プロパティを理解しよう

記事内に商品プロモーションを含む場合があります

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つのプロパティが定義されています。

  • namevalで定義されているため、読み取り専用であり、オブジェクトが生成された後は変更できません。
  • agevarで定義されており、オブジェクトが生成された後でも値を変更できます。

ゲッターとセッター

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メソッドでnameageプロパティを使用して自己紹介をしています。

ageプロパティはvarとして定義されているため、person1.age = 26のように値を変更することが可能です。

また、nameプロパティはvalとして定義されているため、値を変更することはできません。

5. まとめ

Kotlinにおけるプロパティは、クラスが保持するデータを管理するための基本的な仕組みです。

valを使って変更不可のプロパティを定義し、varを使って変更可能なプロパティを定義します。

ゲッターやセッターはKotlinによって自動的に生成され、簡潔で読みやすいコードを作成することができます。

プロパティの理解は、Kotlinを使用して効率的にプログラムを構築するための重要なステップです。




Kotlin練習問題2-7:プロパティを理解しよう

小さなショップの商品の管理システムを作成しましょう。

各商品は名前、価格、在庫数を持っています。この情報を管理するために、Productクラスを作成してください。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. Productクラスを作成し、以下の3つのプロパティを持たせてください。
    • name (商品の名前、文字列型)
    • price (商品の価格、整数型)
    • stock (在庫数、整数型)
  2. コンストラクタを使って、namepricestockの初期値を設定できるようにしてください。
  3. メイン関数で、以下の3つの商品のインスタンスを作成し、それぞれのプロパティに以下の値を設定してください。
    • りんご: 価格150円、在庫数50個
    • みかん: 価格50円、在庫数100個
    • バナナ: 価格120円、在庫数30個
  4. 最後に、各商品の名前、価格、在庫数をコンソールに出力する関数を作成し、全ての商品情報を表示してください。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

商品名: りんご, 価格: 150円, 在庫数: 50
商品名: みかん, 価格: 50円, 在庫数: 100
商品名: バナナ, 価格: 120円, 在庫数: 30

----- ↑出力される結果の例↑ -----

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.Productクラスの定義
 1-1. namepricestockのプロパティを持つProductクラスの定義
 1-2. コンストラクタの定義により、namepricestockの初期値を設定できるようにする

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を呼び出して商品の情報を表示

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

// 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を活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Kotlin練習問題集へ戻る
    トップページへ戻る