Rubyの会18回「継承・まとめ」
ibに再ハマりしました…!😊
今回の進捗です。
agenda
1. 継承( .class , superclass )
.class
string .new(" ") と同じ意味。
class
メソッドは、レシーバのオブジェクトがどのクラスのインスタンスであるかを調べます。戻り値はクラス(Class
オブジェクト)です。
.superclass
superclass
メソッドは、クラスの親クラスを返します。戻り値はクラス(Class
オブジェクト)です。親クラスがないときは
nil
を返します。Ruby 1.8では、Object
クラスには親はありません。
superclass (Class) - Rubyリファレンス
2.palindrome? メゾット
>> s.palindrome? # Wordが鏡文字かどうかを調べるメソッド
回文。文字列を前から読んでも後ろから読んでも同じ場合かを調べる。
palindrome?
メソッドを追加しました。このように、Ruby のクラスは実行時に編集することができます。これは Ruby の強力な特性です。Ruby のクラス階層とシングルトンについて理解できたところで、次は
self
に話題を移します。上記のpalindrome?
メソッドの定義の中で、self
が使用されていることに注目してください。
3.リテラルコントラスト
意味 :暗黙で作り出す。
>> s = "foobar" # ダブルクォートは実は文字列のコンストラクタ => "foobar" >> s.class => String
上のコードを書くと、、、
>> s = String.new("foobar") # 文字列の名前付きコンストラクタ
=> "foobar"
>> s.class
=> String
>> s == "foobar"
=> true
上記のように暗黙で作成される。
4. インスタンスメゾット
newメゾット(クラスメゾット)で呼び出した結果のこと。
newメゾットから呼び出されることを「クラスメゾット」という。
このことからインスタンスから呼び出されるメゾットのことを「インスタンスメゾット」という。
例 .length
5.クラスの継承
superclass クラス断層を調べることができる。
>> s = String.new("foobar")=> "foobar" >> s.class # 変数sのクラスを調べる => String >> s.class.superclass # Stringクラスの親クラスを調べる => Object >> s.class.superclass.superclass # Ruby 1.9 からBasicObjectという新しい基底クラスが導入された => BasicObject >> s.class.superclass.superclass.superclass => nil
単語の会文化を確認できる。(self.でも省略できる)
self == self.reverse または self == reverse
省略法でもできる
6.4章のまとめ
- Rubyは文字列を扱うためのメソッドを多数持っている
- Rubyの世界では、すべてがオブジェクトである
- Rubyでは
def
というキーワードを使ってメソッドを定義する - Rubyでは
class
というキーワードを使ってクラスを定義する - Railsのビューでは静的なHTMLと埋め込みRuby(ERb)が使える
- Rubyの組み込みクラスには配列、範囲、ハッシュなどがある
- Rubyのブロックは (他の似た機能と比べ) 柔軟な機能で、添え字を使ったデータ構造よりも自然にイテレーションができる
- シンボルとはラベルである。追加的な構造を持たない (代入などができない) 文字列みたいなもの。
- Rubyではオブジェクトを継承できる
- Rubyでは組み込みクラスですら内部を見たり修正したりできる
- 「“deified”」という単語は回文である
Rubyの会17回「メゾット/each/time/map/join シンボル・ハッシュ ・p関数」
今日から夏休み!!!!!✨
今日の進捗です。
agenda
- eachメゾット
- timeメゾット・mapメゾット
- &:
- joinメゾット
- ハッシュ {} とシンボル :hoge
- p関数
1. eachメゾット
繰り返し処理を順に繰り返し全ての処理を行うためのメゾット
書き方が2通りあるよ!!(書いてある意味は同じです。)
コードの意味: 1から5までの数字を繰り返し2を i とかけたものを表示する
- (1..5) 範囲オブジェクトに対してeachメゾットを読んでいる。
- | i | ブロックを操作するときには変数を指定しないといけない。
i(ローカル変数)を使用してブロックを操作し代入する。
|i|(ブロック変数)の名前は なんでもおk。例 | hoge |
1.一行でコードを書きたいとき
ブロックを使うとき{}で囲まないといけないけど do end も使用できる。
>> (1..5).each { |i| puts 2 * i } 2 4 6 8 10 => 1..5
2.2行以上のとき
>> (1..5).each do |i| ?> puts 2 * i >> end 2 4 6 8 10 => 1..5
参考元 eachメソッド - Qiita
------------------------------------------------------------------------------
2. timeメゾット ・mapメゾット
-
timeメゾット 同じ内容を繰り返して表示
コードの意味: "Betelgeuse!"を3会表示させる
>> 3.times { puts "Betelgeuse!" } # 3.timesではブロックに変数を使用していない "Betelgeuse!" "Betelgeuse!" "Betelgeuse!" => 3
-
mapメゾット 配列、範囲オブジェクトを適応させる。
{}の中身に適用させたい処理をかく。
>> (1..5).map { |i| i**2 } # 「**」記法は冪乗 (べき乗) => [1, 4, 9, 16, 25] >> %w[a b c] # %w で文字列の配列を作成
=> ["a", "b", "c"] >> %w[a b c].map { |char| char.upcase } => ["A", "B", "C"] >> %w[A B C].map { |char| char.downcase } => ["a", "b", "c"]
省略した書き方(上と構文は一緒)
>> %w[A B C].map { |char| char.downcase } => ["a", "b", "c"]
>> %w[A B C].map(&:downcase) => ["a", "b", "c"]
&: は char(範囲オブジェクト)を短縮するためのもの。
------------------------------------------------------------------------------
5. joinメゾット
文字列をまとめて表示する。
参考引用 join (Array) - Rubyリファレンス
------------------------------------------------------------------------------
6. ハッシュ { } と シンボル :hoge
ハッシュ{ } 配列を作る。
注意
- 並び順は保証されない。
- []とは別物。
>> user = {} # {}は空のハッシュ => {} >> user["first_name"] = "Michael" # キーが "first_name" で値が "Michael" => "Michael" >> user["last_name"] = "Hartl" # キーが "last_name" で値が "Hartl" => "Hartl" >> user["first_name"] # 要素へのアクセスは配列の場合と似ている => "Michael" >> user # ハッシュのリテラル表記 => {"last_name"=>"Hartl", "first_name"=>"Michael"}
別の記述方法 こっちの方が簡単!
>> user = { "first_name" => "Michael", "last_name" => "Hartl" } => {"last_name"=>"Hartl", "first_name"=>"Michael"}
シンボル : hoge 軽量な文字列。
比較してみましょう。
>> "name".split('') => ["n", "a", "m", "e"]
注意
- -(ハイフン)は使用できない _(アンダーバー)は使用できます。
- 数字が使えない
NoMethodError: undefined method `split' for :name:Symbol >> "foobar".reverse => "raboof" >> :foobar.reverse NoMethodError: undefined method `reverse' for :foobar:Symbol
------------------------------------------------------------------------------
7. p 関数
p関数
- 引く数の内容を文字列と数値を使い改行と順番に主力。
- .inspect と意味はほぼ同じ
要はそのまま表示してくれる。
p("Hello Ruby \n") p(1234) #=>"Hello Ruby \n" # 1234
参考文献 【Ruby】表示メソッドについて(print,puts,p) - TASK NOTES
------------------------------------------------------------------------------
7. まとめ
- each 繰り返し処理をする。 (1..5).each
- time 回数表示 2.time
- map 値に要素を反映させる
- &: 変数を省略できる (&: hogehoge)
- join 要素を統合してひとつの文字列にする
- ハッシュ {} 配列をつくる
- シンボル :hoge 軽量な変数
- p関数 そのまま表示。
今日あった出来事
>> params = {}# 'params' というハッシュを定義 ('parameters' の略) => {} >> params[:user] = { name: "Michael Hartl", email: "mhartl@example.com" } => {:name=>"Michael Hartl", :email=>"mhartl@example.com"} >> params => {:user=>{:name=>"Michael Hartl", :email=>"mhartl@example.com"}} >> params[:user][:email] => "mhartl@example.com"
emailのデータを表示するコードが書かれれているのですが、
お題でnameはとれるかな…?と言われて
>> params[:user]
ってかいたらとれると思っていたんだけど
結果
=> name=>"Michael Hartl", :email=>"mhartl@example.com"
で値を2つ取れてた。emailいらない…
・・・・
いろいろ試した結果
こうするとnameだけ値を取ることができる。
>> params[:user][:name]
userの中のnameってことかと納得。PHPと取得の仕方一緒なのに・・
初心者脱却したい…( ; ; )
今回の宿題
ハッシュとシンボルを覚えてくる。
------------------------------------------------------------------------------
Rubyの会16日目「メゾット・範囲演算子」
最近サイコブレイクにはまってます(бвб。)
進捗です。
agenda
- string_message
- split
- ! 破壊的メゾット
- 配列・範囲演算子
- その他の機能
1.string_message
引数をひとつ取り、引数が空かどうかを判定するメッセージを返すメゾットを作ります。
>> if str.empty?
>> "It's an empty string!"
>> else
>> "The string is nonempty."
>> end
>> end => :string_message
>> puts string_message("foobar") The string is nonempty.
>> puts string_message("") It's an empty string!
>> puts string_message It's an empty string!
メゾットの引数を省略することもできる。
def string_message(str = '')
この上記の変数はデフォルトなので書いても書かなくても使用されます。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
2.split 文字列の分割
split('')の中に(’x’)と指定すると x で区切ることができるという意味。
下の例は , で分割される。
文字列
引数patternに文字列を指定した場合は、その文字列を区切り文字とします。
--------------------------------------------------------
3.破壊的メゾット !
Rubyには、非破壊的メゾットと破壊的メゾットがある。
- 破壊的メゾットとは aの状態に影響が及ぼされるもののことをいう。
オブジェクトが変更される。
- 非破壊的メゾットは aに影響がないもの。
オブジェクトが変更されない。
a = "bar"
p a.chop # "ba"
p a # "bar" : 変わらない
p a.chop! # "ba"
p a # "ba" : 変わる
非破壊的メゾット一覧
>> a => [42, 8, 17]
>> a.empty? => false
>> a.include?(42) => true
>> a.sort => [8, 17, 42]
>> a.reverse => [17, 8, 42]
>> a.shuffle => [17, 42, 8]
>> a => [42, 8, 17]
破壊的メゾットの使用例
メゾットの後ろに ! をつけると作れます。
>> a => [42, 8, 17]
>> a.sort! => [8, 17, 42]
>> a => [8, 17, 42]
------------------------------------------------------------------------------------
6.配列・範囲演算子
- 配列 特定の順序を持つ要素リスト
- 範囲演算子 同じかどうかを比較する計算
Ruby ではゼロオリジンを採用しています。(0からスタートする)
>> a = [42, 8, 17] => [42, 8, 17]
>> a[0] # Rubyでは角かっこで配列にアクセスする => 42
>> a[1] => 8
>> a[2] => 17
>> a[-1] # 配列の添字はマイナスにもなれる! => 17
配列要素にアクセスするには角かっこを使用する。
なんと配列の数字を取り出すとき、英単語でも取り出せる…!(衝撃)
>> a # 配列「a」の内容を確認する => [42, 8, 17]
>> a.first => 42
>> a.second => 8
>> a.last => 17
>> a.last == a[-1] # == を使って比較する => true
7.その他の機能
length メゾット 文字の数を数える
>> x = a.length # 配列も文字列と同様lengthメソッドに応答する => 3
>> x == 3 => true
>> x == 1 => false
>> x != 1 => true
>> x >= 1 => true
>> x < 1 => false
sortメゾット 並べ替える
配列ソート(昇順)
a = ["Red", "Red", "Blue", "Green"] p a.sort! ⇒ ["Blue", "Green", "Red", "Red"]
配列ソート(降順)
a = ["Red", "Red", "Blue", "Green"] p a.sort.reverse! ⇒ ["Red", "Red", "Green", "Blue"]
pushメゾット 要素を追加する
>> a.push(6) # 6 を配列に追加する => [42, 8, 17, 6]
>> a << 7 # 7を配列に追加する
=> [42, 8, 17, 6, 7]
>> a << "foo" << "bar" # 配列に連続して追加する
=> [42, 8, 17, 6, 7, "foo", "bar"]
joinメゾット 文字列を統合させる。(splitと逆)
>> a => [42, 8, 17, 7, "foo", "bar"]
>> a.join # 単純に連結する
=> "428177foobar"
>> a.join(', ') # カンマ+スペースを使って連結する
=> "42, 8, 17, 7, foo, bar"
to_a %w 文字や数字の配列に変換する
>> 0..9
=> 0..9
>> 0..9.to_a# 配列でない数字の9にto_aを実行してしまった NoMethodError: undefined method `to_a' for 9:Fixnum
>> (0..9).to_a # 丸かっこを使って明示的に範囲クラスのto_aメソッドを呼ぶ
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2番目のエラーはto_aを呼ぶときは0…9 を (0…9)かっこを追加する必要がある。
文字にも指定できる!!!!!!
>> ('a'..'e').to_a
=> ["a", "b", "c", "d", "e"]
同様に%w配列が作れます!!
>> a = %w[foo bar baz quux] # %wを使用して文字列の配列に変換
=> ["foo", "bar", "baz", "quux"]
>> a[0..2] => ["foo", "bar", "baz"]
便利機能 -1 配列の長さを指定できる。
メリット
- 配列の長さがわからなくても配列の最後の要素を指定できる。
- 一度に全てを選択することができる。
>> a = (0..9).to_a => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>> a[2..(a.length-1)] # 明示的に配列の長さを使って選択
=> [2, 3, 4, 5, 6, 7, 8, 9] >> a[2..-1] # 添字に-1を使って選択
=> [2, 3, 4, 5, 6, 7, 8, 9]
Rubyの会15回目「文字列 ・rubyメゾット」
そろそろ夏休み(*'ω'*)!
今日の進捗です。
agenda
- #{}
- スペースの仕方・違いについて #{} 変数+変数
- 記号の説明 [ \n , ' ' ," " , <?, || ]
- 変数 length empty?
- s.include?("foo")
-
nil ・ !!(バンバン)
- まとめ
1.# {}
- ” ”の中に変数の値を表示したいとき使う。
ほかにも\を使った例↓
エスケープシーケンス 説明 \a ベル \b バックスペース \e エスケープ \f 改行ページ \n 改行 \r 復帰 \t 水平タブ \v 垂直タブ \" ダブルクォート(") \' シングルクォート(') \\ ¥マーク
2.スペースの仕方・違いについて
変数を2つ使ったときのスペースの開ける方法が2種類あるらしい。
- ”#{変数名} #{変数名}”
- 変数名+” ”+変数名
どちらを使っても大丈夫らしいが、主に
- View
- Controler と model
で使われる。
読みやすさは2なのでこれから使うときは2で頑張る
3.記号の説明 \n ' ' " " <? ||
- n\ 改行 バックスペースは¥マークを押すとでる。
- ” ”と’ ’の違い。’ ’は変数と改行は使えないが、” ”は使える
>> '\n' # 'バックスラッシュ n' をそのまま扱う => "\\n"
反映されていない場合¥が前に表示される。
反映が成功していた場合はそののまま表示される。
- <? まだ記述終わっていないサイン。
- || または
4.変数 length empty?
- length 長さを知るために使う。
- empty? からかどうかを確かめる。
nil? すべてのオブジェクトに定義されている。nilのときのみtrueを返す。
empty? 文字列の長さが0のとき、または配列が空のときにTrueを返す。もちろん数値には定義されていない。
blank? railsの拡張。nil, "", " ", [], {} のいずれかでTrueを返す。
5.s.include?("foo")
変数.include?("foo") の意味があやふやだったので確認($・・)/~~~
注:タイトルに書かれている s は変数のことです。
教科書の一部抜粋してきました。
>> s = "foobar"
>> if s.nil?
>> "The variable is nil"
>> elsif s.empty?
>> "The string is empty"
>> elsif s.include?("foo")
>> "The string includes 'foo'"
>> end => "The string includes 'foo'"
この部分の説明します。
>> elsif s.include?("foo")
sという関数の中に”foo” という文字が入ってるかを聞いています…!
6.to_s
配列を文字列にする。
to_s
メソッドは、配列を文字列に変換します。Ruby 1.8では、配列の各要素をto_s
メソッドで文字列に変換して連結した文字列を返します。組み込み変数$,
に区切り文字を設定すれば、区切り文字を間に入れて連結します。
6. nil ・ !!(バンバン)
Rubyにおいて
nil
は特別なオブジェクトです。Rubyのオブジェクトのうち、オブジェクトそのものの論理値がfalseになるのは、false
自身とnilの2つしかありません。なお、「!!
」(「バンバン (bang bang)」と読みます) という演算子を使うと、そのオブジェクトを2回否定することになるので、どんなオブジェクトも強制的に論理値に変換できます。
その他の Rubyオブジェクトは True です。
>> !!0 => true
なので 0は false で 1などは Trueで返される。
その他はTrueで表示される。
7.まとめ
今回は主にRubyについて学びました!楽しいz
新用語
- unless 条件分が偽の場合に使われる。
if文みたいに使える.....!
unless 条件式 then 条件式が偽の時に実行する処理 else 条件式が真の時に実行する処理 end
参考所 ↓
おまけ
この記事も読んで少し理解できたのがうれしい(*‘ω‘ *)!
おわり
Rubyの会14日目「#・nil・rails cの文字化け」
▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわあああああああ(心境)
今日の進捗です。
この2つの他に「文字化けの直し方」についても記載します。
agenda
1.復習[ full_title(yield(:title)) ]
4行目(黄色い部分)に注目。
<title><%= full_title(yield(:title)) %></title>
上の意味がわからない場合は前の記事に戻る。前回の「引数」の復習。
rails concole
-----------------------------------------------------------------------
2.エラーの起こる理由 test
エラーは自力で直せた(教科書通りすすめたらできた
のだが、理由がわからなかったので記載する。
リスト4.5: RED$ bundle exec rake test 3 tests, 6 assertions, 1 failures, 0 errors, 0 skips
エラーを治す方法
「home」画面
<% provide(:title, "Home") %> <h1>Sample App</h1> <p> This is the home page for the <a href="http://www.railstutorial.org/">Ruby on Rails Tutorial</a> sample application. </p>
<% provide(:title, "Home") %>
部分を消去する。こうすることによりtestがパスされる為エラーがなくなるらしい。
最初何言っとるんじゃってなったので細かく説明していく。
少し前に戻る。
このtestページの意味を考えると理由は簡単だった。
require 'test_helper'
class StaticPagesControllerTest < ActionController::TestCase
test "should get home" do
get :home
assert_response :success
assert_select "title", "Ruby on Rails Tutorial Sample App"
end
test "should get help" do
get :help
assert_response :success
assert_select "title", "Help | Ruby on Rails Tutorial Sample App"
end
test "should get about" do
get :about
assert_response :success
assert_select "title", "About | Ruby on Rails Tutorial Sample App"
end
end
まずはhomeのテストから
test "should get home" do get :home assert_response :success assert_select "title", "Ruby on Rails Tutorial Sample App" end
ruby onRails Tutorial Sample App と表示さればok。
それに対して help と about は
test "should get help" do get :help assert_response :success assert_select "title", "Help | Ruby on Rails Tutorial Sample App" end test "should get about" do get :about assert_response :success assert_select "title", "About | Ruby on Rails Tutorial Sample App" end
縦棒が入っている!(要は表示の仕方が違う)だから provide の部分を消さないといけなかった。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
3.nil
何もない。ブランクという。
nil は決してないという意味。nill
nilは存在しないという意味。
対して ""は「何も無い」が存在している。空白の存在。
nilに近い関数達
enpty? 中身の値が空なのかを調べる(入れ物はある前提)trueかfalseで値を返す。
blank? nil?とempty?を足したもの。中身は空なのかと,入れ物自体は存在するのか判定。
-------------------------------------------------------------
4. コメントの書き方 ruby
初めて知ったのも何個かあった。
"ハッシュマーク" "オクトソープ"
Rubyでコメントを書くにはいくつか書き方があります。
# コメント
-- 1行コメントは「#」のあとに書く=begin
コメント
=end
-- 「=begin」から「=end」の間がコメントになる__END__
-- この行以降すべてがコメントになる
おまけ rails c で色々試した。
文字列の結合>> "foo"+"bar"=> "foobar"文字列の中で変数を使う方法>> "#{first_name} Hartl"=> "Michael Hartl"1 空白を入れる>> first_name + " " + last_name=> "Michael Hartl"2 空白入れる>> "#{first_name} #{la}"lambda last_name>> "#{first_name} #{la}"lambda last_name>> "#{first_name} #{last_name}”
puts と print の違い
文字列の出力することは同じだが、改行するかしないかの違い。
puts 実行結果を改行する
print 改行しない
print で改行表示させる方法
>> print "foo\n"foo
[Ruby]putsとprintの挙動の違いを確かめてみる : THINK PINK
-----------------------------------------------------------
5.文字化け問題[ rails ](解決済)
4.2.1 の部分
$ rails console >> 17 + 42 # 数の加算 => 59
#の後が文字化けしてしまった。。
rails c文字化けの直しかた
これで直ると思ったが、失敗。👆
libreadline rails
どうやら、rb-readlineが必要らしいので、Gemfileに
gem 'rb-readline'
を追加してインストール
解決しました。
6.まとめ
使用したコマンド
- Ctrl + D コンソール終了