プログラミング備忘録

プログラミングの学習状況をメモしています

六日目

今日の学習

Ruby

簡単なアプリの作成

とにかく自分の頭でプログラムを作ってみるのが一番いい、とのことなので、最初は簡単なクイズのプログラムを作ってみる。

今日できた分。

#何問目か表示
count_q = 1
#得点加算
count_point = 0

quiz = "整数のオブジェクト名は何でしょうか?"
answer = "Integer"
hint = "I○○○○r"

puts <<~TEXT
Rubyに関するクイズです。

TEXT

for count_q in 1..10
  puts <<~TEXT 
  #{count_q}問目
  #{quiz}
  *「hint」と入力すると、ヒントが出ます*
  TEXT

  loop do
    guess = gets.chomp
    if answer == guess
      puts <<~TEXT
      正解です!
      ------------------------------
      TEXT
      count_point += 10
      count_q += 1
      break
    elsif guess == "hint"
      puts <<~TEXT
      #{hint}
      答えを入力してください!
      TEXT
    else 
      puts <<~TEXT
      不正解です...
      答えは、#{answer}でした
      ------------------------------
      TEXT
      count_q += 1
      break
    end
  end
end

puts "100点満点中「#{count_point}」点でした!"

とりあえず、入力を受け付けてくれる、答えが合っていると加点される、ちゃんと10問出題されると終了する...という部分はしっかりと動いてくれたっぽい?

しかし、このままでは永遠にIntegerを要求するbotになってしまうので、明日は問題を増やす方法を模索したい。

できれば、30問ほど用意して、その中からランダムに10問出題するというような形を取りたい。

とりあえず今日は雛形を作ったところで終了。

途中でやめる手段も用意したい。回答の大文字と小文字を区別しないようにしたい。...と、改善点が現時点で山盛りになっている。

モジュール

モジュールについて学習したが、いまいちどの場面で使うべきなのかピンときていない。

名前空間に対しても、分かったようで分からんという状態。

Railsの中でよく見た::の正体が分かったという点で若干進展があった。

【Ruby/namespace】Rubyでよく見る「:: ←これ」を深ぼる - Qiita

この記事が分かりやすかった。

メソッド呼び出しの後に使っていたドット.は、::の代替(省略形)だった...。

知らず知らずのうちに色んなものの省略形を、省略形と認識せずに学んでいることが非常に心配。

Ruby on Rails

CRUD処理の実装

Progateでは、HTTPメソッドでgetpostしか使わなかったが、patchdeleteというものがあることを知った。

更新のためのメソッドを利用すると、更新ページの入力欄にあらかじめ登録されている情報がすでに入力されていて感動した。

最初はルーティングにしっかりURLを書いて...というやり方で練習をしたが、resourcesを使うことにより全てを賄えることを知って脱帽。

ProgateでRailsをやっていたとき、URLを間違えたり誤字があったりでエラーが頻発していた上に、erbファイルに記載するときも詰まりがちだったので、これだけで飛躍的にエラーを回避できるのではないか...?

学習メモ

  • rails g controllerでは、使わないファイルも作成されてしまうため、コントローラーは個別で作る方がよい(モデルはコマンドでOK)
  • ビューファイルにデータを受け渡す必要がない場合は、インスタンス変数(@)を使用しなくてもよい
  • rails routes Railsアプリに用意されているルーティングを確認できる
  • モジュール内のメソッドを実行する場合は、モジュール名の後ろに::をつける
  • 入力を受け付ける際はchompメソッドを使い、改行されないようにする

余談

トラックパッドでの操作が面倒くさい。

普段PCを使う際はマウスを使用していたので、スムーズに動かせない(まだ慣れていないという部分は大いにある)。

マウスを操作する時間を省ける、効率がいいというメリットがあることははよく分かるが、いい加減マウス操作がしたくなってきたので、適当なマウスを購入する予定。

五日目

今日の学習

Ruby

昨日、countries.map!{ |country| country.capitalize}でやりたいことができた!と思っていたが、

countries.map!(&:capitalize)でも同様の結果が得られることが分かる。

【Ruby】array.map(&:method)を理解する - Qiita

こちらの記事が参考になった。

Ruby on Rails

Railsの簡単な使い方を学習した。

たった1ページ付け足すだけで何度もエラーが起こったが、かなり初歩的なエラーが多かったので逆に勉強になった。

hekuroを使用してデプロイをするところまでやってみたが、何が起こっているのか正直理解できていないままお手本をなぞっていた。

RailsはProgateで予め多少知っていたので、なんとなくどういう仕組みなのかが分かっている状態だったが、hekuroも含めまだまだ怪しい状態なので、回数を重ねて慣れていきたい。

今日のやらかし

f:id:hasegawa_note:20210507194328p:plain

newメソッドを利用したいが、ずっとエラーが出る。

なんでだろうなあとずっと考えていたが、単純にnewメソッド内でuserを定義していないのにいきなり使おうとしていたことが原因だった。

indexメソッドで一度定義しているので...という感じでそのまま書いていたっぽい。

これは今後もやりそうなミスなので、気をつけたい。

四日目

今日の学習

Ruby

メソッドとオブジェクトの関係性

昨日詰まっていたところが無事理解できた。
countries = ["japan", "china", "america"]

この配列を、頭文字だけ大文字にして出力したいときはどうすればよいか。
はじめは変数に、capitalizeメソッドを使って出力しようとした。 countries.capitalize

エラー文が出てしまい、他にも破壊的メソッドにしてみたり他のメソッドを検索したりしてみたが解決できず。
メンターの方に尋ねると、「capitalizeメソッドなどは、Stringに使用する」と決まっている。
しかし、countriesは配列...Arrayなので、直接capitalizeメソッドを使うことはできない。
配列の中のひとつひとつの文字列に対してメソッドを実行する必要がある...とご教示いただけた。 今までデータ型を全く意識できていなかったので、目から鱗。 mapメソッドを使い、新しく配列を作成する。

countries.map!{ |country| country.capitalize}

これで、無事に出力ができた。
Rubyの公式ドキュメントを確認して、データ型を把握することの重要性を理解した。

どのメソッドが使えるかどうかは、メソッドを使う値が何の種類のオブジェクトなのかによって変わる。

(methodsメソッドを使うことにより、どんなメソッドが使用できるかどうか調べられるっぽい)

そして、Rubyではオブジェクトの種類をクラスと呼ぶ。...なるほど。



アクセサメソッド

Progateで、インスタンス変数を勉強したときに「attr_accessor」をいきなり習った(はず)。
実際にはアクセサ...セッターとゲッターというものを簡略化した形であるということを学んだ。

ハッシュオブジェクト

ハッシュのキーに使われている「:」これが、前についたり後ろについたりしているのを見て、一体どういう基準なのか?と思っていた。

users = { "name" => "Hasegawa", "age" => 25 }  
users = { :name => "Hasegawa", :age => 25 }  
users = { name: "Hasegawa", age: 25 }  

これらの書き方は全て同じ意味であることを知った。一番下の形しかろくに知らなかったせいで混乱していたのかもしれない。

他にも、アクセサメソッドのように元の形を知らなければどういう意味なのか分からないまま適当に流しているものが色々ありそう。

学習メモ

今日のやらかし

  • 何度かendを書き忘れてエラーが出る。先に記述するように意識する。
  • インスタンス変数をクラス内で使用するときに、@をつけ忘れる。

余談

ドットインストールのプレミアム会員に加入。

Rubyを中心に学習予定。

三日目

今日の学習

Ruby

やんばるエキスパートに入会したので、教材を参考にしながら課題に取り組む。
ProgateのRailsで散々見ていたのに、ハッシュは{}、配列は[]ということを今日やっと意識した。
よく分からない状態で[params:]とかを書いていたような...
配列内の英文字を大文字にする、先頭だけ小文字にする出力が上手くいかず、一時間も浪費してしまった。
まず、自分のどこが間違っているのか分からないという状態だったので、講座におられるメンターの方に質問をした。
明日解決したい。

学習メモ

今日のやらかし

  • each文
names = ["田中", "佐藤", "佐々木", "高橋"]
names.each.with_index(1) do |name, i|
  puts "会員No.#{i} #{name}さん"
end

これで「会員No.X ○○さん」と出てくれるが、
最初、変数の部分(ブロックパラメータ)を| i, name |と書いてしまい、結果が

会員No.田中 1さん
会員No.佐藤 2さん
会員No.佐々木 3さん
会員No.高橋 4さん

になってしまった。
どうして変数の順序が逆になるといけないのか、根本的な理由が分かっていないが、大丈夫か...
調べてみたところ、iが先に来ることにより「配列で何個目なのか」という表現になってしまい、うまく#{i}のところに入ってくれなかったのではないかと予想。

  • putsやpを使い忘れ、延々となぜ出力されないのか考えていた

余談

自分、絶望的に思考がプログラミングに向いていないのでは!?と日増しに感じるようになってきた。
繰り返し学習し、自分がどう理解できていないのかを把握して、しっかり思考できるようになっていきたい。

二日目

今日の学習

Git

Gitの基本的な流れの学習。
実際にGitHubを使用する。

コミット

チェックアウト

マージ・プッシュ

プルリク

Ruby

条件分岐、メソッド、配列、繰り返し処理など
Progateを一通りやっておいてよかった。 はじめの頃は引数で何をしているのかさっぱりだったが、昔と比べると今はまだ分かるようになっている。
ifの省略や三項演算子の存在を知る。

ifを使ったサンプルプログラムが戦闘ゲームの再現だったので、味方か敵どちらかのHPが0になるまで処理を繰り返すには、どういった文章を書いたらいいんだろうか……と気になり、色々試したが分からなかった。

プログラミングに限らないが、習ったことを理解できても他のことに応用したりできない、例題を解くことしかできないという非常に悪い状態なので、学習を通じて改善されていくことを願う。

学習メモ

  • 範囲オブジェクト(Range)
  • ifの省略形
  • 三項演算子
  • randメソッド(指定した数字の中からランダムな値を表示)
  • デフォルト引数
  • each.with_index(n)  nから開始
  • 配列 << 要素  配列に要素を格納する(member << user等)
  • odd? (even?) 奇数(偶数)ならtrue、逆はfalse
  • 文字列連結
  • 文字列内の改行は「\n」
  • shuffleメソッド ランダムにする
  • 破壊的メソッド 元のデータを書き換える。最後に「!」をつける

今日のやらかし

  • 英単語のスペルミスが多い

余談

Macbookのキーボードカバーを購入。 安物なのですぐ駄目にならないか不安。

一日目

自己紹介

長谷川です。

4月にIT業界に興味を持ち、プログラマーを目指すようになったプログラミング初心者です。

現在25歳の無職なので、半年後の就職を目標に、Rubyを中心にプログラミングの勉強をしていくつもりです。

今月の目標は、Rubyで簡単なプログラムを作ってみること。

Progateにて、

(一応JavaScriptも)

を一通りやってみました。

5月からはやんばるエキスパート様の教材を中心に学習予定です。

今後はどんなことを学習したか、どんなところでつまづいたか、どんなミスがあったかを備忘録代わりに書いていきたいと思います。

万年三日坊主な人生を歩んできたので、しっかり継続できるように頑張っていきたいと思います。

今日の学習

Git

基本的な使い方を学習。

【初心者必見】Gitの基本

文章の解説を読むよりも、実際に手を動かしたり動画を見ながら学習する方が理解しやすい。

動画を見ながら勉強する経験がなかったので目から鱗

SQL

Progateで学習。

サブクエリに苦戦。

どこからデータを持って来ればいいのかは分かるが、どういう式を組み立てればいいのかが分からず。

今日のやらかし

  • 日付データを取り出すときにダブルクォーテーションで囲まなかった。数値データではない。

  • SQLの最後には「;」を忘れないこと。

余談

折角なので、Markdown記法を使って記入しようとして、色々な方の投稿を見てみると、「hoge」「fuga」という表現をよく見かけた。

最初にこの表現を見たときは書き手特有の表現なんだろうなと思っていたが、プログラム界の共通語だったので驚いた。