Hitsuji_monのブログ~ 村上春樹のあれ ~

文学好きな組み込み系エンジニア

【#100DaysOfCode】8日目 「作りながら学ぶRuby入門」11章 アプリケーションの働きをするクラス

今日は仕事でも新しい言語を結構さわれて良かった。
そして本日の内容は、これまでの総まとめ的なコードでもある。
依存関係に注意!!

Day 8

・「作りながら学ぶRUby入門」第11章

内部に、「手続き化された操作」を持つクラス
アプリケーションの働きを持つクラス

今までは

[以前]
<クラス側>

<アプリケーション側>

  • クラスを呼び出して、変数に適用する
  • 実行処理を行う


だったが、上記の「手続き全てをクラスの中に押し込めよう」としたのが今回のコード

[今回]

<クラス側>

  • 大クラスを定義する (入れ物の型宣言)
  • アプリケーション用のクラスを内部に定義する
  • アプリケーションクラスにインスタンスを複数作成する : ハッシュを使う
  • アプリケーション処理(インスタンスを表示する操作など)を[手続き]として、定義する

<アプリケーション側>

  • 上記 大クラスを呼び出す
  • 大クラスの中の操作メソッドを指定して、実行する


終わり!という凄さ

以下そのコード

# 「作りながら学ぶRuby入門」 第11章 アプリケーションの働きをするクラス
## クラスの中に、インスタンスを実行する操作が入っている

# Studentクラスを作る
class Student
    def initialize(name, age)
        @name = name
        @age = age
    end

    # Studentクラスのインスタンスの文字列表現を返す
    def to_s
        "#@name, #@age"
    end
end

# StudentBookアプリケーションのクラスを作る
class StudentBook
    def initialize
        @students ={}
    end

    # ハッシュにStudentクラスのインスタンスを複数作成する
    # 作成する処理を手続きにする
    def setUpstudents
        $students = {                               #studentsをインスタンス変数に変更
            :shin => Student.new("Shin Kuboaki", 45),
            :shinichiro => Student.new("Shinichiro Ooba", 35),
            :shingo => Student.new("Shingo Katori", 30),
        }
    end

    # 全てのインスタンスの名前と年齢を表示する
    def printStudents
        $students.each { |key, value|
            puts "#{key} #{value.to_s}"

        }
    end

    # StudentBookかデータをリストする
    def listAllStudents
        # Studentクラスのインスタンスの作成
        setUpstudents
        # Studentクラスのインスタンスの表示
        printStudents
    end
end

########  main処理:アプリケーション化したクラスを呼びだし、操作  ##########

# StudentBookクラスのインスタンスを作成する
student_book = StudentBook.new

# Studentクラスのインスタンスの表示
# ---> StudentBookクラスの操作を呼び出す
student_book.listAllStudents


まとまってる!!

しかもこれだけの処置を60行くらいで書けるって、
いい意味で動的型付け言語は、雑。

あと、コードを直す際「クラス側だけ直せばいい」から保守性も高そうなイメージ。

Cで構造体へのポインタを振り回していた時を考えると、
感動〜〜〜〜。