プログラム初心者の僕が「恋するプログラミング -Rubyでつくる人工無能- 」を読んで勉強してみた 休日
本日は昨日、なかなか理解ができなかった。
サンプルコードの理解に励んでいましたが、いまだに人に説明できる程度の理解にまで、至っておりません、ということで、ドットインストールを使って現在Rubyの基礎を習得中です、明日には終わると思うので、
終わり次第、また続きをしていきたいと思います。
それではおやすみなさい。
プログラム初心者の僕が「恋するプログラミング -Rubyでつくる人工無能- 」を読んで勉強してみた ⑥ Chapter3
みなさんこんばんは。
いよいよchapter3からは、実際に人工無能を作っていく段階に入ります。
chapter2までは、とんとん拍子に本書の内容を理解できてたので、chapter3も大丈夫だろうとたたをくくっていたところ、足元を救われましたね、数段プログラムのレベルが上がったような気がします。
オリジナルのメソッドや、クラスが多用され、中々わかるようで分からないといった状態に陥っています。
なので、わからない単語や理解できないメソッドの数々を、どのような役割を担っているのか、部品ごとに理解しながら進めていかなければなーと思います。
プログラムの勉強法自体、僕はまったくわかっていないので、とりあえず進めた方がいいのか。理解するまで粘った方がいいのかと・・・
とりあえず、僕の現段階での基本方針は、コードを見てそれがどのような働きをしているのかがそれなりにわかるまでは、理解に努めることにしました。
そして、今回「疑似コード」という
class 人工無能
def 対話(ユーザからの発言)
いろいろして応答を作る
return 応答
end
end
以上のものが登場します。とりあえずの骨組みとして、日本語で行いたい処理を記述した、疑似コードの作成は、一旦プログラムで考えることをやめて、
日本語で設計してしまってから、その後にプログラムで、できる限り、理想に近いものを実現して、ゆくゆくは完璧なプログラムを~といったやり方が良いのかもしれませんね。
一度どのようなものが作りたいのかを詳しく
文章におこして、そこからどのような動作をするのかの設計図やフローチャート、疑似コードの作成と、順を踏んで徐々にといったやりかたが良いのだろうと
僕は今回の勉強を通して、思いました。
中々に目から鱗です。
学習した用語集
・# : これがある行の行末までは、コメントとみなされる。
・require : 別のファイルを取り込み、ロードを行うメソッド
・return : 呼び出し元に値を返す
qiita.こrerurnの説明としては、以上が一番分かりやすかったです。
それでは今日はこの辺で。おやすみなさい
プログラム初心者の僕が「恋するプログラミング -Rubyでつくる人工無能- 」を読んで勉強してみた ⑤ Chapter2まとめ
みなさんこんばんは、本日は昨日の予告通り
chapter2の範囲の知識のみでほぼサンプルコードを作りました。
ご覧ください。
class Hello
def initialize(otu)
@otu = otu
@count = 0
end
def setName(str)
@name = str
@name << " 様"
end
def dispName()
print(@name,"おはよう")
end
def greeting
if @count < @otu
case rand(10)
when 0..2
puts("#{@name}体調はいかがですか?")
when 3, 4, 5
puts("#{@name}おなかがすきましたね")
when 6,7
puts("#{@name}楽しいことでもありましたか?")
else
puts("#{@name}眠たくなってきました・・・")
end
else
puts("#{@name}おやすみなさい・・・")
end
@count += 1
end
end
実行 コード
5.times do
puts('Hello')
(オブジェクト).greeting
end
以上のコードがどのような処理をするのかというと
まず、インスタンスを作成後、setNameメソッドでプログラムを使用する人の名前を定義しています。
greetingメソッドでは実際に行う処理を記述しており、if @count < @otuでは
インスタンスの初期化時に受け取った引数@otuと@countを比較し、真であれば
caseを実行、偽であればelseを実行します。
- 感想
それなりに納得いくものができたので、これでよしとしましたが、僕的には
putsの文字列の表示回数でwhenの値が変わるようにしたかったです。
randによりランダムで会話文は表示はされますがね。
今回はまだまだ、勉強することばかりだなと、痛感しました。
眠いので今日はこの辺で、明日もがんばっていきたいです。
今回学んだ用語集
<< : 変数に文字列を追加する
プログラム初心者の僕が「恋するプログラミング -Rubyでつくる人工無能- 」を読んで勉強してみた ④
みなさんこんばんは。
本日もプログラム初心者の僕が「恋するプログラミング -Rubyでつくる人工無能- 」を読んで勉強したので勉強内容をまとめていきたいと思います。 chapter 2-11までの内容です。
今回は、オリジナルオブジェクトの作成と使い方がでてきて、もういきなりちんぷんかんぷんになりそうです・・・昨夜勉強した、インスタンス変数やクラスメソッド理解していたと思っていたのですが、中々実践となると難しいです。
それでは、理解を深めるためにも説明に入っていきましょう。
まず、オリジナルメソッドについて。
オリジナルメソッドはdefで始めてendで終わります。
つまりは、defとendの間が実行される内容ということです。
以下のサンプルをもちいて流れを説明していきます。
def panchi(target)
puts("#{target}ストレート!")
return target
end
defの横のpantiがメソッド名、(target)が引数を受け取る準備で、引数を受け取ると
targetという変数に格納します。
そして2行目#{}この括弧内に変数を入れておくと、変数が指すオブジェクトに展開してくれます。そして3行目のreturnは、あとにある式の実行結果をメソッドの戻り値を返してくれます。いまいちここは本書の説明だけではわかりにくいので、解説サイトを見て理解しました。
参考
それではオリジナルメソッドについては以上になります。
続いてはオリジナルオブジェクトです・・・。
まずは今回学んだ用語説明からいきます。
・initializeメソッド : 初期化された際にカウンターを0にセットする、タイマーを準備、ファイルからパラメータを読むこむなどです。「(変数)」で引数を受け取る事も出き、与えられた情報かを初期化処理に利用することもできます。
・インスタンス変数・・・オブジェクトが独自に保存する情報。つまり、クラスより生成されたインスタンスにそれぞれ違った情報を保持できます。
オリジナルオブジェクトとは、要はクラスのことです。
クラスを作り、インスタンスで実際に処理を実行する。
昨日のクラスとインスタンスの説明の通りなので割愛。
とりあえず今回はオリジナルオブジェクトの作成、使用手順について理解することができました。chapter2はこれにて、終わりなので、何かchapter2にて勉強したコードを用いたプログラムを、明日は作っていきたいと思います。
今回学んだ用語集
制御構文
・rand() : 0から()に代入した引数未満まで範囲で、ランダムな整数を生成してくれる
・case : caseの後に置いた式の実行結果とwhenを比較し、等しければwhenの処理を実行します。
・when: 上述参照。
・ハッシュ・・・配列と違い、順序をもちませんが、文字列などをキーとして使用することができる。
・インデックス : 配列の添字、つまり、配列の要素の並んだ順番です。
それでは、おやすみなさい。また明日。
プログラム初心者の僕が「恋するプログラミング -Rubyでつくる人工無能- 」を読んで勉強してみた ③
みなさんこんばんは。いや。おはようですかね?
本日は、1日20ページと決めていた勉強の予定を守ることができませんでした。
しかし、それにはオブジェクト指向を理解するための必要な知識を得るという、もっともな理由がありました。なので、今回はその学んだ内容の復習になります。
今回学んだ(重要な)こと。chapter 2-6
「オブジェクト・クラス・インスタンス」はオブジェクト指向を理解するにおける、重要な役割を担っている概念みたいなので、
しっかり覚えようと、今回は、クラス・インタンス、オブジェクトについて詳しく調べてみました。
まず、クラスとインスタンスについて、これは2つ一緒に覚えた方が良いので、まとめて説明します。クラスとは、設計図のようなもので、それを複製することにより、いくつでもクラス(設計図)をもとにした、インスタンスを作ることができます。そして、実際に処理の役割を担うのが、このインスタンスです。
あまり、車種については詳しくありませんが、図でイメージを掴んでいただけましたか・・・?
掴めなかった場合は以下の
class User
initialize(name
@name = name
enddef put_name
p @name
end
enduser1 = User.new("taroo")
user2 = User.new("hanako")
user1.put_name => “taroo”
user2.put_name => “hanako”
クラスの概念を理解しよう!Rubyのclassとは | TechAcademyマガジン
コードを用いた説明がとてもわかりやすかったので、こちらも紹介しておきます。
ついでに、インスタンス変数について、インスタント変数はクラス内の全メソッドで使用でき、クラスから作成されるオブジェクト毎に固有のものになります。
インスタンス変数の変数名は@からはじまります。
またまたついでになりますが、インスタンスメソッドやクラスメソッドなどについても知る事ができ、その説明が分かりやすかったので、そちらも紹介です。説明割愛以下参照
そして、最後に「オブジェクト」についてなのですが、オブジェクトはそもそも変数とメソッドをまとめて、そのまとまりに名前をつけたものです。
Rubyにおいての「オブジェクト」はなんらかのクラスのインスタンスのことを指します。Rubyではすべてのデータがオブジェクトなので、みなさん知らずの間にオブジェクトを使用していたのです。
解説は以下のページを参考にしました。
概念を理解!Rubyのオブジェクトとは【初心者向け】 | TechAcademyマガジン
それでは今日はこのへんで、おやすみなさい。またあした。
今回学んだ用語集
比較演算子において
・真 ・・・偽以外のすべて
・偽 ・・・falseとnil
・クラス名は大文字から始める。
よって0や文字列も真となります。
・配列・・・複数のオブジェクトをまとめて定義できる。また、配列にあるオブジェクトひとつひとつを「要素」という。https://wa3.i-3-i.info/word11926.html
・each : 配列、範囲オブジェクト用メソッド で順に要素をとりだしていく。
プログラム初心者の僕が「恋するプログラミング -Rubyでつくる人工無能- 」を読んで勉強してみた ②
みなさんこんばんは、昨日は案の定、風邪の症状が良くならず
体調が悪かったので、寝ながら、ぼーっとしたりしていました。
本日は、まだ風邪の方は治りませんが、だいぶ楽になり
少し本を読めたので、勉強できたことを書き記していきたいと思います。
内容はrubyインストールと文法についてです。
本書chapter2-5までの内容となっています。
僕は、この本を読み始める以前に、rubyの最新版を入れていたこともあり、そちらの方でirbを開き、print("ワンツー¥n")という、画面に文字列を表示させるサンプルコードを
書いてみようとしたのですが、かな入力を使うことができません。
また使用すると、バグなのかわかりませんが、irb内に文字を打てなくなってしまうので、再起動する必要がでてきます。
考えていても原因が分からず、時間がもったいないので、本書で紹介しているActivescriptRuby(以降 : Rscript)をおとなしくインストールしてしまおうと、本書にて配布されているファイルをダウンロードすることにしました。
ですが、ファイル自体本書が出版された、2005年の物でさすがに古すぎる事もあり、
Rscriptの最新版がないものかと,
さがしたところ、ありました。RScriptを配布している
上記にてwindows用にパッケージングされ、さらにRscriptを同梱と思われる。Ruby2.40というものがあったので、ダウンロード。
無事インストールもでき、問題も解決し、一件落着です。
今回学んだ(重要な)こと。
print("ワンツー¥n")
=> を分解してみると
・実行結果に表示される 「=>」 これは「実行結果は~」という意味
・printはメソッドで命令、決められた動きをし、戻り値を返す
・()内の部分は引数で、今回画面に表示させる内容となる。
今回学んだ用語集
・¥n :改行
・nil : オブジェクトを返すことができないときの、実行結果。
・nilや"ワンツー\n"(引数や文字列)などの「モノ」のことをオブジェクトと言う。
・do~end までの範囲はすべてが「引数」になる「ブロック」である。
・irb内では改行したコードも実行できる
・変数 : オブジェクトを入れておく箱。または、名札のようなもの。
・+,% : 演算子、そのまま計算式に使われている演算記号
・==: 比較演算子 右と左が等しいかを調べる
・制御構文: 処理の流れを制御する。
・| | : ブロックパラメータ ブロックの先頭にてパイプ(| |)で囲むとと使える変数
例で言うと、timesメソッドの場合、パイプ内の変数に0~9までの繰り返しの回数がセットされる。
1回目だと1,2回目だと2 以降....etc
panti = "なぐる"
10.times do |a|
if a%2 == 0
puts(''なでる")
else
puts(panti)
end
end
一応、以上の用語を覚えやすいように、サンプルを改変させたコードです。
それではもうそろそろ寝ないとまずいので、寝ます。おやすみなさい。また明日