pandamanian’s diary

rubyとrailsについてアウトプットします!

『Ruby』三項演算子

こんにちは!

ぱんだまにあです😊

本日は三項演算子について記載します!

まずは普通にif文を書いていきます。

[386] pry(main)> def calc
[386] pry(main)*   a = [1,2,3,4,5]
[386] pry(main)*   if a.shuffle.first == a[0]  
[386] pry(main)*     "#{a[0]}でした"    
[386] pry(main)*   else  
[386] pry(main)*     "#{a[0]}ではありませんでした"    
[386] pry(main)*   end  
[386] pry(main)* end  
=> :calc

上記はメソッドの中でif文を書いています。
そしてaをシャッフルさせて要素の先頭が1ならtrueを返しますので "1でした"と言う文字列が返ります。

逆に要素の先頭が1以外だとfalseが返りますので
"1ではありませんでした"と言う文字列が返ります。

って言うメソッドですね😊
calcと打ち込むだけなので簡単に検証出来ますので何回か連打します!


[388] pry(main)> calc
=> "1でした"
[389] pry(main)> calc
=> "1ではありませんでした"
[390] pry(main)> calc
=> "1でした"
[391] pry(main)> calc
=> "1ではありませんでした"
[392] pry(main)> calc
=> "1でした"
[393] pry(main)> calc
=> "1でした"
[394] pry(main)> calc
=> "1ではありませんでした"
[395] pry(main)> calc
=> "1ではありませんでした"
[396] pry(main)> calc
=> "1ではありませんでした"

if文が機能していますね!


三項演算子を使ってみよう

では早速上記のif文を三項演算子を使って書き換えます!

[401] pry(main)*   a = [1,2,3,4,5]
[401] pry(main)*   a.shuffle.first == a[0] ? "#{a[0]}でした" :  "#{a[0]}ではありませんでした"   
[401] pry(main)* end 

こんな感じで書きます!

[403] pry(main)> calc
=> "1ではありませんでした"
[404] pry(main)> calc
=> "1ではありませんでした"
[405] pry(main)> calc
=> "1ではありませんでした"
[406] pry(main)> calc
=> "1ではありませんでした"
[407] pry(main)> calc
=> "1ではありませんでした"
[408] pry(main)> calc
=> "1でした"
[409] pry(main)> calc
=> "1ではありませんでした"
[410] pry(main)> calc
=> "1ではありませんでした"
[411] pry(main)> 

ちゃんと分岐出来てそうですね!

三項演算子の解説

初めて三項演算子をみた方からすると?や:等見慣れない記号があってびっくりされたかもしれません。
三項演算子は下記の通り定義します。

条件式 ? trueの処理 : falseの処理


ここでは
条件式 はa.shuffle.first == a[0]
trueの処理 は"#{a[0]}でした"
falseの処理 は"#{a[0]}ではありませんでした"

って事になります!
個人的には見慣れてしまえばこっちのもんって感じです😊

each文と組み合わせる


以下、普通にif文を使用した例です。

[4] pry(main)> arr = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[5] pry(main)> odd_arr = []
=> []
[6] pry(main)> even_arr = []
=> []
[7] pry(main)> arr.each do |n|
[7] pry(main)*   if n.odd?
[7] pry(main)*     odd_arr << n
[7] pry(main)*   else  
[7] pry(main)*     even_arr << n
[7] pry(main)*   end  
[7] pry(main)* end  
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[8] pry(main)> odd_arr
=> [1, 3, 5, 7, 9]
[10] pry(main)> even_arr
=> [2, 4, 6, 8, 10]


では三項演算子を組み合わせた例を見てみましょう!

[1] pry(main)> arr = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2] pry(main)> even_arr = []
=> []
[3] pry(main)> odd_arr = []
=> []
[4] pry(main)> arr.each do |n|
[4] pry(main)*   n.odd? ? odd_arr << n : even_arr << n
[4] pry(main)* end  
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[5] pry(main)> odd_arr
=> [1, 3, 5, 7, 9]
[6] pry(main)> even_arr
=> [2, 4, 6, 8, 10]

三項演算子を使用すると比較的コンパクトになりました。
複雑なif文でない限りコードの見通しを良くする為にも積極的に使用していきたいですね!


簡単な例

最後に簡単な三項演算子の例を記載して終わりになります!


[412] pry(main)> 1 + 1 == 2 ? "1です" : "1ではない"
=> "1です"

これも立派な三項演算子で非常に簡単な例ですね!

ここでは 条件式 == 1 + 1 == 2 trueの処理 == "1です" falseの処理 == "1ではない"

になります。

逆にfalseの処理も見てみましょう。


[414] pry(main)> 1 + 1 == 3 ? "1です" : "1ではない"
=> "1ではない"

簡単ですね!
ではでは勉強頑張りましょう!

『Ruby』includeとprepend

お疲れ様です!

今回はincludeとprependの違いについてアウトプットです😊

配列に対して使用出来るshuffleというメソッドをオーバーライドする事によってincludeメソッドとprependメソッドの挙動の違いを確認して行きます!

includeとは

実際にコードを書いて動作を確認しましょう。

[1] pry(main)> module Calc
[1] pry(main)*   def calc
[1] pry(main)*     p "計算機能"
[1] pry(main)*   end  
[1] pry(main)* end  
=> :calc

これで"計算機能"という文字列を出力する事が可能なmoduleを定義しました。
次にaddクラスを作ってこのCalcモジュールをincludeします!

[2] pry(main)> class Add
[2] pry(main)*   include Calc
[2] pry(main)* end  
=> Add

ここから取り込んだCalcモジュールの機能を使ってみます!

[3] pry(main)> a = Add.new
=> #<Add:0x00007fe1482cbdf8>
[4] pry(main)> a.calc
"計算機能"
=> "計算機能"

ここではaという変数にAdd.newでAddインスタンスを作成して代入しています!
aというインスタンスに対してcalcというメソッドを使用して"計算機能"と言う文字列をさせています。
つまりクラスの中でinclude + module名とする事でインスタンスに対してmodule内の機能を取り込む事が出来るんですね😊

ちなみにクラスメソッドとして呼び出す事は出来ません!

[5] pry(main)> Add.calc
NoMethodError: undefined method `calc' for Add:Class
from (pry):11:in `__pry__'

Addクラスに対してcalcメソッドはありません💢ってなります。。。

ここでは詳しくは話しませんがクラスメソッドとして使いたい場合はextendを使用する事で解決します。
上の構文のincludeをextendに書き加える感じですね😊

まとめるとincludeメソッドとはモジュールの機能をクラスに取り込んでそのクラスのインスタンスに対してその機能を使用出来る様にするメソッドですね!
つまり
モジュール(Calc)の 機能(calc)を クラス(Add)に取り込んで
そのクラスのインスタンス(a)に対して使用出来る様にしています!

prependとは

さてさて今度は上の構文をそのままprependに置き換えてみましょう!

[1] pry(main)> module Calc
[1] pry(main)*   def calc  
[1] pry(main)*     p "計算機能"    
[1] pry(main)*   end  
[1] pry(main)* end  
=> :calc
[2] pry(main)> class Add
[2] pry(main)*   prepend Calc
[2] pry(main)* end  
=> Add
[3] pry(main)> a = Add.new
=> #<Add:0x00007fae4b3a9de0>
[4] pry(main)> a.calc
"計算機能"
=> "計算機能"

何も変化はありません😭

じゃあ何が違うのよ🤔って話ですが
結論から言うとクラスを先に参照するかモジュールを先に参照するのかって事です😊
ここでは実際にArrayクラスで使えるshuffleメソッドをオーバーライドする事でincludeとprependの違いを確認してみましょう!

まずprependの効果を確認します。

[1] pry(main)> a = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2] pry(main)> b = (1..4).to_a
=> [1, 2, 3, 4]

[4] pry(main)> module Shuffle
[4] pry(main)*   def shuffle
[4] pry(main)*     self.length < 5 ? reverse : super
[4] pry(main)*   end  
[4] pry(main)* end  
=> :shuffle

上の構文ではShuffleモジュールを定義してその中でshuffleメソッドを定義しています。
インスタンスのlengthが5未満ならreverseメソッドを呼び出して5以上ならsuper(元々定義されているshuffleメソッド)を呼び出すメソッドですね。

[5] pry(main)> class Array
[5] pry(main)*   prepend Shuffle
[5] pry(main)* end  
=> Array

上の構文ではArrayクラスにShuffleモジュールをPrependしたのでArrayクラスから作られるインスタンスでmoduleで定義されたshuffleメソッドが使用出来ます!


では早速・・・

[6] pry(main)> arr = Array.new(a)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[7] pry(main)> arr2 = Array.new(b)
=> [1, 2, 3, 4]

[10] pry(main)> arr.shuffle
=> [4, 10, 1, 9, 5, 7, 3, 2, 8, 6]
[11] pry(main)> arr2.shuffle
=> [4, 3, 2, 1]

出来ました!
arrインスタンスの配列のlengthは5以上(false)なのでArrayクラスに元々備わっているshuffleメソッドが呼び出されました。
arr2インスタンスの入れるの長さは5未満(true)なのでmodule内で定義したreverseメソッドが呼び出されました。

これはArrayクラスに元々備わっているshuffleメソッドではなくmoduleで定義されたshuffleメソッドが先に呼び出された事を意味します。

呼び出される順番を知ろう

どの順番で呼び出されるかを知る為に便利なメソッドがあります。
ancestorsメソッドを使用すると参照する順番を知る事が出来ます!

[14] pry(main)> Array.ancestors
=> [Shuffle,
 Array,
 Enumerable,
 Object,
 PP::ObjectMixin,
 Kernel,
 BasicObject]

先にShuffleモジュールが参照されている事が分かります。 この様にprependではArrayクラスよりも先にmoduleで定義されたshuffleが先に参照される事が分かりました。

prependからincludeに変化させると参照先の順番が変化します!

[5] pry(main)> class Array
[5] pry(main)*   include Shuffle
[5] pry(main)* end  
=> Array

[8] pry(main)> arr = Array.new(a)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[9] pry(main)> arr2 = Array.new(b)
=> [1, 2, 3, 4]
[10] pry(main)> arr.shuffle
=> [2, 9, 4, 7, 5, 8, 3, 1, 10, 6]
[11] pry(main)> arr2.shuffle
=> [2, 1, 3, 4]

[12] pry(main)> Array.ancestors
=> [Array,
 Shuffle,
 Enumerable,
 Object,
 PP::ObjectMixin,
 Kernel,
 BasicObject]

参照先の先頭がArrayクラスなのでArrayクラスに元々組み込まれているshuffleメソッドが先に参照されたのでarrもarr2も普通にシャッフルされました!

もう一度結論から言うと
includeはクラスを先に参照する。
prependはモジュールを先に参照にする。
って事です😊

少しでもincludeとprependの違いを模索している方の力になれれば幸いです😇

『Ruby』ハッシュについて①

お疲れ様です!

本日はハッシュについてアウトプットします!

まずは簡単なコードでハッシュを定義してみましょう😊

ハッシュの定義

[1] pry(main)> hash = {orange: "200円",melon: "500円", apple: "300円"}
=> {:orange=>"200円", :melon=>"500円", :apple=>"300円"}

これでハッシュを定義する事が出来ました!

この様にハッシュは {キー: バリュー,キー: バリュー}
の様に定義します。

要素のデータを取得するには下記の通りのコードとなります!

要素の取得

[2] pry(main)> hash[:orange]
=> "200円"
[3] pry(main)> hash[:melon]
=> "500円"
[4] pry(main)> hash[:apple]
=> "300円"
[5] pry(main)> 

上記の通り hash[:キー]の様にして値を取得しています!
また値は変更出来ます。 そして新たにキーと値を追加する事も出来ます。

値を変更する

変更するには下記の通りとします。

[11] pry(main)> hash[:apple] = "1000円"
=> "1000円"
[12] pry(main)> hash[:orange]= "5000円"
=> "5000円"
[13] pry(main)> hash[:melon]= "10000円"
=> "10000円"
[14] pry(main)> hash
=> {:orange=>"5000円", :melon=>"10000円", :apple=>"1000円"}


キーと値を追加する

変更する事が出来たので次は新たにキーと値を追加してみましょう!

[18] pry(main)> hash[:grape]= "4000円"
=> "4000円"
[19] pry(main)> hash
=> {:orange=>"5000円", :melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}
[20] pry(main)> 

追加出来ましたね😊


ハッシュでeachメソッドを使う

ハッシュにおいてもeachメソッドを使う事が出来ます!

以下コード例です😊 ここではブロック引数が一つの場合と二つの場合に分けて挙動の確認をしましょう!

まずはブロック引数が一つの場合です。

[21] pry(main)> hash.each do |h|
[21] pry(main)*   p h
[21] pry(main)* end  
[:orange, "5000円"]
[:melon, "10000円"]
[:apple, "1000円"]
[:grape, "4000円"]
=> {:orange=>"5000円", :melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}

この様に配列で返ってきます!

次にブロック引数が二つの場合はどうでしょうか?

[23] pry(main)> hash.each do |key,value|
[23] pry(main)*   p "キーは#{key}で値は#{value}です"  
[23] pry(main)* end  
"キーはorangeで値は5000円です"
"キーはmelonで値は10000円です"
"キーはappleで値は1000円です"
"キーはgrapeで値は4000円です"
=> {:orange=>"5000円", :melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}

この様に
一つ目の引数にはキーが入ります。
二つ目の引数には値が入ります。


引数の数が代わるだけで挙動が変化して返ってくる結果が変わるのは面白いですね😊

削除する

そしてキーと値を削除したい場合はdeleteメソッドを使用します!

[24] pry(main)> hash.delete(:orange)
=> "5000円"
[25] pry(main)> hash
=> {:melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}

この様にキーを引数に渡すとそのキーに関連づけされた値も削除されます!

何が言いたいのかって言うと

[25] pry(main)> hash
=> {nil =>"5000円", :melon=>"10000円", :apple=>"1000円", :grape=>"4000円"}

の様にはならないって事ですね!

ではでは引き続き学習頑張りましょう!

『Ruby』配列について①

お疲れ様です!

今日はRubyの配列について記載します😊

配列の定義

配列の定義は非常に簡単です!

irb(main):065:0> a = ["apple0","apple1","apple2","apple3"]
=> ["apple0", "apple1", "apple2", "apple3"]

これで配列が定義出来ました!
ここではaと言う変数に配列を代入しています!
ではここで代入されたaと言う変数のクラスを確認して見ましょう!

irb(main):073:0> a.class
=> Array

Arrayと出ているので配列が定義されています!
配列はよく棚の様なものとして例えられる事が多いですね😊

じゃあ配列を定義して何が嬉しいのかですが。。。

それは1回定義してしまえば簡単にそのデータを取り出す事が出来ます😊

じゃあその取り出し方ですが

irb(main):066:0> a[0]
=> "apple0"
irb(main):067:0> a[1]
=> "apple1"
irb(main):068:0> a[2]
=> "apple2"
irb(main):069:0> a[3]
=> "apple3"
irb(main):070:0> 

この様に記述する事で何回でも取り出す事が出来ます😊

1回1回文字列で"apple"と入力するのって面倒ですからね。

ここで注目したいのはa[0]と言うオブジェクトのクラスは何でしょうか? 早速確認してみましょう!

irb(main):074:0> a[0].class
=> String

a[0]のクラスはstringになっていますね! つまりここではa[0]は文字列である"apple0"を参照しているんですね🤔

余談ですが文字列なので過去の記事でも紹介しました+メソッドが使えます!文字列連結が出来ます!

irb(main):075:0> a[0] + a[1]
=> "apple0apple1"
irb(main):076:0> a[1] + a[2]
=> "apple1apple2"
irb(main):077:0> a[2] + a[3]
=> "apple2apple3"
irb(main):078:0> 

それぞれの変数がなんのクラスに属しているかを把握するのは重要な事ですね!

a[0]は文字列であり、クラスはStringクラスでした。
じゃあ結局Stringクラスって何のメソッドが使えるの?って時はmethodsメソッドが使用出来ます!

irb(main):005:0> a[0].methods
=> [:encode, :encode!, :include?, :%, :*, :+, :count, :partition, :sum, :next, :to_c, :casecmp, :casecmp?, :insert, :bytesize, :match, :match?, :succ!, :<=>, :next!, :upto, :index, :replace, :==, :===, :chr, :=~, :rindex, :[], :[]=, :byteslice, :getbyte, :setbyte, :clear, :scrub, :empty?, :eql?, :-@, :downcase, :scrub!, :dump, :undump, :upcase, :+@, :capitalize, :swapcase, :upcase!, :downcase!, :capitalize!, :swapcase!, :hex, :oct, :freeze, :inspect, :bytes, :chars, :codepoints, :lines, :reverse, :reverse!, :concat, :split, :crypt, :ord, :length, :size, :grapheme_clusters, :succ, :start_with?, :center, :prepend, :strip, :rjust, :rstrip, :ljust, :chomp, :delete_suffix, :sub, :to_str, :to_sym, :intern, :sub!, :lstrip, :<<, :to_s, :to_i, :to_f, :gsub!, :chop!, :chomp!, :delete_prefix, :gsub, :chop, :end_with?, :scan, :tr, :strip!, :lstrip!, :rstrip!, :delete_prefix!, :delete_suffix!, :delete!, :tr_s, :delete, :squeeze, :tr!, :tr_s!, :each_grapheme_cluster, :squeeze!, :each_line, :each_byte, :each_char, :each_codepoint, :b, :slice, :slice!, :hash, :encoding, :force_encoding, :unicode_normalize, :valid_encoding?, :ascii_only?, :rpartition, :unicode_normalize!, :unicode_normalized?, :unpack, :unpack1, :to_r, :between?, :<=, :>=, :clamp, :<, :>, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :instance_variable_set, :protected_methods, :instance_variables, :private_methods, :method, :public_method, :public_send, :singleton_method, :define_singleton_method, :extend, :to_enum, :enum_for, :!~, :respond_to?, :object_id, :send, :display, :class, :nil?, :dup, :singleton_class, :clone, :then, :itself, :yield_self, :untaint, :taint, :tainted?, :trust, :untrust, :untrusted?, :singleton_methods, :frozen?, :methods, :public_methods, :equal?, :!, :instance_exec, :!=, :instance_eval, :__id__, :__send__]

と沢山出てきてしまいました。。。
それだけ沢山のメソッドが使用できるって事ですね!

良く見ると過去記事で紹介した+メソッドがありますね😊 1.methodsとかやると-メソッドや%と言った数値に対して使えるメソッドが出てきます。

余談ではありますが、上記で出てきたメソッドはインスタンスメソッドです😇 メソッドは大別して
- インスタンスメソッド
- クラスメソッド

があるのですが後日アウトプットさせて頂きます!

とにかく配列は簡単に定義出来て簡単にデータが取得出来て便利ですね。

では何個か配列に対して使用出来る代表的なメソッドを使用してみます。


eachメソッド

ブロック引数に変数iを渡す事によって配列の要素を一つづつ取り出せます!

[1] pry(main)> a = ["apple0","apple1","apple2","apple3"]
=> ["apple0", "apple1", "apple2", "apple3"]
[2] pry(main)> a.each do |i|
[2] pry(main)*   puts i
[2] pry(main)* end  
apple0
apple1
apple2
apple3
=> ["apple0", "apple1", "apple2", "apple3"]


each_with_index

ブロック引数に引数を二つ渡す事によって要素と添字両方を取得する事が出来ます!

[5] pry(main)> a.each_with_index do |i,index|
[5] pry(main)*   puts "要素=#{i},添字=#{index}"  
[5] pry(main)* end  
要素=apple0,添字=0
要素=apple1,添字=1
要素=apple2,添字=2
要素=apple3,添字=3
=> ["apple0", "apple1", "apple2", "apple3"]

ブロックとは一言で言うと処理の塊です!
|i,index|の部分をブロック引数と呼びます。 ここでは下記の様にdo ~ endまでがブロックですね😊

do |i,index|
puts "要素=#{i},添字=#{index}"  
end  

ブロック引数に"i"と"index"という変数を渡して要素と添字を出力して下さいと命令しているんですね。
こういった処理を可能にしているのがeach_with_indexメソッドな訳です。

map

ブロック内で処理をした結果を配列で返します!
元の配列は変更しません!

[29] pry(main)> a.map do |i|
[29] pry(main)*   i + i
[29] pry(main)* end  
=> ["apple0apple0", "apple1apple1", "apple2apple2", "apple3apple3"]

[30] pry(main)> a
=> ["apple0", "apple1", "apple2", "apple3"]

元の要素を変更してしまいたい場合は

map!

を使用します。

[31] pry(main)> a.map! do |i|
[31] pry(main)*   i + i
[31] pry(main)* end  
=> ["apple0apple0", "apple1apple1", "apple2apple2", "apple3apple3"]

[33] pry(main)> a
=> ["apple0apple0", "apple1apple1", "apple2apple2", "apple3apple3"]

この様に元の要素を変更してしまうメソッドの事を
破壊的メソッド
と読んでいますね😊
名前のインパクトがすごいですよね笑

色んな破壊的メソッドがありますので興味があればググってみて下さい!

今回は配列についてアウトプットさせて頂きました!
ではでは学習頑張りましょう😊

Progateは難しいよ?

こんにちは!

ぱんだまにあです😊

今回は初学者の登竜門である

Progateは普通に難しいよ?


って話をしていきます!

エンジニアになろうって漠然と感じた方はまずProgateに行き着くのではないでしょうか。

よく言われているのが

  • Progateは簡単です。
  • Progateは初心者向け。
  • Progateはわからなかったらやばい。


って聞いた事ある人多いと思います!

結論を先に言いますね

いやいやprogate普通に難しいよ?

先に私のスペックについて簡単に。。。

  • ゴリゴリの文系(あんま関係無いかな?)
  • プログラミングって言葉自体あんまり聞いた事無い
  • web系とか良く分かりません状態
  • そもそもそんなパソコン詳しくない

私と同じ様な境遇の人はまず間違いなくProgateも難しく感じるのでは無いでしょうか?
是非そうあって欲しいです。。。

私は2020年11月半ばくらいにProgate登録してHTMLから始めたので挫折仕掛けた記憶も鮮明なのでこれから学ぶ方の参考になれば幸いです。


HTML・CSSの中級編から既に難しい

初級編は何とか食らい付けた。

まず"タグ"って言葉とかCSSの"要素"とか知らない単語が出てきて本当に最初からしんどかったですね。

上級編に至っては仙人様の言われるままにコード書いて自分が何をやっているのか全く分かりませんでした笑

でも2週目入ると少し理解出来てる部分が出てきて少しだけスムーズにこなす事が出来たかなって感じです。

HTML・CSSコースの道場コースで撃沈

ある時道場コースってのがある事に気づきました。

まぁ2週したし何とかなるっしょと思って気軽にクリック


えっ!?何!?これ自分でやるの??


っ感じでした😭😭

10秒くらい
🙂 みたいな顔してました。


で、どうしたかって言うと30分くらい眺めて1回道場から逃げ出してJavscriptコースをに行きました😭

Javascriptコースでさらに撃沈

戻り値、リターン、渡す、メソッド、などなどなど。。。
知らない単語のオンパレードで本当に意味不明でした。
得にリターンは人生トップレベルにつまづきました。

 const calc = (a,b) =>{
    return a + b
  }
  console.log(calc(1,2))

3が出力されますね!
文章変えてますが

関数の中でreturnを使うと、呼び出し元で値を受け取る事が出来て関数はその値を戻り値として返します。  


と言う様な説明がされている箇所があります。

ん?どういう事?

って思ったのは私だけではないと思いたい😭


ちなみにこのreturnを朧げに理解するのにすら1週間以上掛かりました。

しかもリターンって調べても初歩の初歩なので
1 + 1 は2ですよー!
みたいな感じでどの解説でも当たり前の様に通りすぎてくんですよね。。。
多分あの1週間切り取ったら戻り値って言葉検索した人世界1位だと思います笑


最終難関Railsコース

ここも本当に難しかった。 一番難しかった。
個人的な肌感ではJavascriptコースやRubyコースの難易度を6程とするとRubyonrailsコースは10以上の難易度です。。。 確か全部で15コースくらいあるのですが最後の方は自分が何をやってるのか分かりませんでした。

ある程度戻り値だったり、関数だったり学んできて少しだけ理解進んだかなって思ってたのにわからない事の連続で精神的にきつくなった記憶があります。

と言うかProgate簡単って言ったの誰だよって感じでしたね笑


結論

progateは自分みたいに今まで何も触れて来なかった人からすれば普通に難しいです。
今でも分からない事の連続で苦しい時はありますが、諦めずに学習を続けているといきなり理解が進むタイミングがあります😇
そして毎日勉強、学習を継続していると1ヶ月前よりも明らかに何かしら成長しているのでは無いでしょうか。

まずはprogate頑張って1周しましょう!

巷だと

  • サクッと1周とか
  • 何回もやるな
  • Progateで分からないとか才能無いよ(twitterで呟いたら言われました😭)  

等の意見が散見されますが
ペースは自分の信じたペースで良いのはないかと思います😊
先に進むって意欲があれば勝手に自分の判断で進めると思いますので笑
そしてProgate分からなくて才能無いと思う必要も無いですね。


余談ですがこの後の登竜門であるrailstutorial(難易度爆上がり)も同じで学習を続けていけばいつか分かる日が来ると思います!

今回は個人的なProgateの感想をざっくりと記載しました。
機会があればそれぞれのコースの感想やハマりポイント等の深ぼっていきたいですね。
それでは学習頑張りましょう!

『Ruby』数値について①

お疲れ様です!

今日はRubyの数値についてと主にそれにまつわる計算方法について記載します😊


数値の定義

下記よりmacのターミナルを開いてirbと打ち込んでいます😊

では数値を定義します!

irb(main):001:0> 1
=> 1

簡単ですね😄


数値はIntegerクラスに属するオブジェクトです!
前回の記事でも紹介しましたがclassメソッドを使用するとそのオブジェクトのクラスを知る事が出来ます。

irb(main):002:0> 1.class
=> Integer

数値のクラスはIntegerですね!

余談ですが。。。

irb(main):014:0> 1
=> 1
irb(main):015:0> Integer(1)
=> 1
irb(main):016:0> Integer("1")
=> 1
irb(main):017:0> 

この3パターンの実行結果は同じですね。

数値の計算


+ 等の記号を使って足し算や引き算が出来ます! では早速。。。

irb(main):021:0> 10 + 10
=> 20#足し算します
irb(main):022:0> 10 - 10
=> 0#引き算します
irb(main):023:0> 10 * 10
=> 100#掛け算します
irb(main):024:0> 10 / 10
=> 1#割り算します
irb(main):025:0> 10 ** 10
=> 10000000000#10を10乗します
irb(main):026:0> 10 % 10
=> 0#余りを算出します


ここで当たり前の様に使っている +や-はメソッドです。
つまりこう書いても等価です。

irb(main):032:0> 10.+(10)
=> 20
irb(main):033:0> 10.-(10)
=> 0
irb(main):034:0> 10.*(10)
=> 100
irb(main):035:0> 10./(10)
=> 1
irb(main):036:0> 10.**(10)
=> 10000000000
irb(main):037:0> 10.%(10)
=> 0

不思議な感じしますね。。。


数値の比較

数値は比較する事も出来ます😊

irb(main):038:0> 10 < 20
=> true
irb(main):039:0> 10 > 20
=> false


=記号をつけると引数に与えられた数値を含めて比較が出来ます!

irb(main):042:0> 10 <= 10
=> true
irb(main):043:0> 10 >= 10
=> true

くどいですが当たり前の様に使ってる<,>,<=,>=等の算数で見慣れた記号もメソッドです!

irb(main):045:0> 10.<(20)
=> true
irb(main):046:0> 10.>(20)
=> false
irb(main):047:0> 10.>=(10)
=> true
irb(main):048:0> 10.<=(10)
=> true

プログラミング未経験だとすごい不思議な感じしますよね😭

文字列から数値への変換

to_iメソッドを使用すると数値に変換する事が出来ます!

irb(main):056:0> 1 + "1".to_i
=> 2

上記は何をやってるかと言いますと to_iメソッドを使用する事によって"1"と言う文字列を1と言う数値に変換しています。 ではメソッドチェーンを使用してクラスを確認して見ましょう。

irb(main):058:0> "1".class
=> String
irb(main):059:0> "1".to_i.class
=> Integer

これでto_iメソッドは数値に変換出来るメソッドなんだと分かります。

少し脱線しますがto_sメソッドは逆で文字列に変換するメソッドです😊

前回の記事で文字列を連結するには

irb(main):060:0> "文字列" + "1"
=> "文字列1"

の様に数値をダブルクォーテーションで囲って文字列に変換しましたね🤔

to_sメソッドを使用しても同じ効果が得られます。

irb(main):061:0> "文字列" + 1.to_s
=> "文字列1"

便利ですね🤗 他にも様々なメソッドが用意されていて数値もまだまだ奥が深いです😭

またご紹介出来ればと思います!

『Ruby』文字列について①

お疲れ様です!

今日はRubyの文字列についてと主にその連結方法について記載します!

文字列の定義

文字列を定義するには
"ダブルクォーテーション"

'シングルクォーテーション'
で囲います。

下記よりmacのターミナルを開いてirbと打ち込んでいます😊

irb(main):001:0> "文字列"
=> "文字列"


文字列はStringクラスに属するオブジェクトです!
余談ですがclassメソッドを使用するとそのオブジェクトのクラスを知る事が出来ます。

 "文字列".class
=> String


つまり文字列オブジェクトはStringクラスのインスタンスと言う事が出来そうですね!

String.new("文字列")
=> "文字列"

と実行しても結果は同じです。

文字列の連結方法


文字列は連結する事が出来ます! 連結するには+メソッドを使用します。

irb(main):002:0> "文字列"+"文字列"
=> "文字列文字列"

連結出来ました!
では次に連結する事によって"文字列1"と言う文字列を出力したかったとします。

しかし明日以降に説明する数値と文字列は連結する事は出来ません。。。
試して見ましょう。

irb(main):006:0> "文字列" + 1
Traceback (most recent call last):
        6: from /Users/youheikanno/.rbenv/versions/2.6.6/bin/irb:23:in `<main>'
        5: from /Users/youheikanno/.rbenv/versions/2.6.6/bin/irb:23:in `load'
        4: from /Users/youheikanno/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
        3: from (irb):6
        2: from (irb):6:in `rescue in irb_binding'
        1: from (irb):6:in `+'
TypeError (no implicit conversion of Integer into String)

と怒られてしまいました😭
文字列はStringクラスのインスタンスでしたね。 では1とはそもそも何なのでしょうか🤔

irb(main):009:0> 1.class
=> Integer

1は数値でクラスはIntegerなので異なるクラスは連結出来ない事を示しています。

ではどうすれば
"文字列1"と出来るでしょうか🤔


1と言う数値をダブルクォーテーション(シングルクォーテーション)で囲って文字列にすれば良いんですね。

irb(main):010:0> "1".class
=> String


これで1が文字列になりましたので連結して見ましょう。

irb(main):011:0> "文字列" + "1"
=> "文字列1"


はい連結出来ました!
本日はここまでですが初学者の方にとっては
メソッドって何?
インスタンスって何?
って方もいると思います😭

ググっても良いと思いますし自分自身のブログにもいずれUPします!

他にも様々な文字列の定義方法及び連結方法がありますがまた機会がありましたらアウトプット致します🤗