📖

Ruby[基礎]

2023/09/06に公開

はじめに

学習したRubyの内容を復習したのでインプットためのメモにしています。
あやふやな部分をピックアップしました!!

文字列型、整数型の型変換

型が違うものを「+」でつなげるとエラーが起きてしまいます。
そこで型変換を行うと違う型でも「+」で接続する事ができます。

to_s (整数型→文字列型へ変換)

to_sは、整数型から文字列型に変換するメソッドです。
to-stringと覚えるとわかりやすい。
以下のように27は整数型のためエラーが起きてしまいます。
なので27を整数型から文字列型へ変換してあげます。
すると問題なく表示されます。

puts "Samの年齢は" + 27 + "です"
# "Samの年齢は" : 文字列型
# 27 : 整数型
# "です": 文字列型
     ↓
puts "Samの年齢は" + 27.to_s + "です"

to_i (文字列型→整数型へ変換)

to_iは、to_sとは逆に文字列型から整数型に変換するメソッドです。
to-integerと覚えるとわかりやすい。
上の記述だと整数型100と文字列型「200」が混ざっているため、TypeError(型に関するエラー)が発生します。
to_iを使用し"200"を整数系に変換することで足し算が行われます。

puts 100 + "200"
    ↓
puts 100 + "200".to_i

変数展開のコードを追加する

変数を扱うようになると、整数型か文字列型か少しわかりづらくなり、to_sを付けるべきか悩んでしまいます。
そこで、変数展開の出番になります。
変数展開を用いると、元の変数がどのような型であっても文字列型に変換してくれます。
変数展開によって以下のメリットが見込まれます。

  • +による連結に比べてコード量が減る
  • 変数の型を気にする必要がない
    変数展開は以下のように使用します。
name = "A"
weight = 50

puts name + "さんの体重は" + weight.to_s + "kgです"
puts "#{name}さんの体重は#{weight}kgです" 

結果としてどちらも同じ表示結果になります。

username:~/environment/ruby $ ruby weight.rb
Aさんの体重は50kgです
Aさんの体重は50kgです

演算結果の展開

変数展開では変数を使った演算結果なども展開することができます。

puts "#{name}さんの体重は#{weight * 2}kgです"

このように記述すると以下のような結果になります。

username:~/environment/ruby $ ruby weight.rb
Aさんの体重は100kgです

配列とハッシュについて

配列とは?

配列を使うと、複数のデータをまとめて保存できます。
配列には、どのようなオブジェクトでも代入でき、同じ配列の要素に異なった種類のオブジェクトを代入することも可能です。
つまり、データ型は問われませんので、文字列でも数値でも代入できます。

names = ["Git", "HTML", "CSS"]
puts names[1]

データを呼び出すには、配列名[インデックス番号]で記述します。
ちなみにインデックス番号は0始まります。

ハッシュとは?

ハッシュは、キーと値をセットで保存できるデータの集合です。
配列では各要素にインデックス番号が割り振られますが、ハッシュでは任意の値(キー)を割り振ることができます。

tall = {"太郎"=>185, "二郎"=>170, "花子"=>150}
puts tall["太郎"]

ハッシュからデータを呼び出すには、出力したい値のキーを指定します。

比較演算子と論理演算子について

比較演算子とは?

「比較演算子」は、値を比較して判定する際に使います。
比較演算子による演算の結果、trueかfalseが返り値として返ってきます。

<   # 右辺の方が大きい
<=  # 右辺の方が大きい、または等しい
>   # 左辺の方が大きい
>=  # 左辺の方が大きい、または等しい
==  # 右辺と左辺が等しい
!=  # 右辺と左辺が等しくないとき

論理演算子とは?

「論理演算子」は、2つ以上の条件を判定する際に使います。
論理演算子による演算の結果、真または偽の値が返り値として返ってきます。

!   # 否定
&&  # どちらの条件も正しければtrue
||  # どちらかの条件が正しければtrue

まとめ

明日は復習したことのアウトプットとしてコーディング面接の題材としてよく使われるFizzBuzzプログラムを出力してみたいと思います。

Discussion