Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2722

マルチスケールシミュレーション特論:第 10 回をまとめてみた

$
0
0

ruby-2.5.5p157

フィボナッチ数列(問題)

  • 本日は Fibonacci 数列についての問題を解く

    fib(n) = fib(n-1)+fib(n-2)
    0 1 1 2 3 5 8 13 21 ...
    

    を recursion(再帰)で求めよ

進め方

前回と同様に テスト駆動開発で今後の学習を進めて行く

  • まずは初項から計算を行う

    • red: 表示を行うred → p fib(0)エラーがおこる
    • green: def をしてみる

      deffib(n)ifn==0return0endend
    • refactoring: assert_equal.rb の assertion(確認)を試しておく

  • 次は、2 項目を求める

    • これは初項と同様に求める
  • 次は 3 項目 = 2 項目 + 1 項目

この処理を逐一行っていく。エラーが現れたら随時処理を行っていく

プログラム(最終版)

上記のようにプログラムを書き進めていくと以下のようなプログラムができます

deffib(n)return0ifn==0return1ifn==1returnfib(n-1)+fib(n-2)endrequire'./assert_equal'# assert_equal.rb  は同じディレクトリにある事を想定[[0,0],[1,1],[2,1],[3,2],[4,3],[5,5],[6,8],[7,13],[8,21]].eachdo|index,expected|putsassert_equal(expected,fib(index))end

class 化

次にクラス化について学習を行ったオブジェクト指向という考え方がある。このキーとなる考え方が,

  • 隠蔽(capsulation)
  • 継承(inheritance)
  • 多形(polymorphism)

である

クラス化とは

クラス化について

簡単にまとめると、オブジェクト指向プログラミングにおけるクラス(英:class)とは、オブジェクトを生成するための設計図あるいはひな形に相当するものである

プログラムをクラス化すると

まずは class なしのプログラム

defputs_hellonameputs"Hello #{name}."enddefgets_namename=ARGV[0]||'world'returnnameend

次にクラスありのプログラム

classHellodefinitialize# インスタンス変数@name=gets_name(name)puts_helloenddefputs_helloputs"Hello #{@name}."enddefgets_namename=ARGV[0]||'world'returnnameendend

インスタンス変数について

  • 宣言

変数の初めに「@」をつけることで宣言を行うことができる

  • スコープ

インスタンスメソッド内でのみ使用できる変数。インスタンスごとに異なる値を持つことができ、メソッドを超えて参照することができる


  • source ~/Downloads/git/grad_members_20f/members/taiseiyo/memos/class10.org

Viewing all articles
Browse latest Browse all 2722

Trending Articles