圧倒的備忘録

忘却は罪である。

【Ruby入門】classのnewとinitializeについて

classとは

変数などのデータとそれを処理するメソッドをまとめたものを指します。

Rubyでclassを使うためには、以下のようにコード中でclassを定義する必要があります。

class クラス名
    # クラスのデータを初期化する
    def initialize(引数)
      処理1
      処理2
      処理3
  ・・・
    end
end

defとは

メソッドを定義するものです。

initialize

クラスのデータを初期化するものです。複数のinitializeは定義できません。

クラスの定義をしましたが、そのままではclassをコード中で使えません。 classのnewメソッドによって、classをインスタンス化する必要があります。

インスタンス化とは

classの定義をもとに新たな変数を作成することです。

# Studentクラスを定義する
class Student
    # Studentクラスのname,ageデータを初期化する
    def initialize(name,age)
        @name = name
        @age = age
    end
    def introduce
       puts "私は#{@name}です。#{@age}歳です。"
    end
end
# Studentクラスのインスタンスを作成し、変数化する。
yamada = Student.new('やまだたろう',21)
tanaka = Student.new('たなかゆうき',18)

# yamada,tanakaインスタンスを出力する。
print yamada.introduce
print tanaka.introduce

実行結果:

 私はやまだたろうです。21歳です。
 私はたなかゆうきです。18歳です。

Student.newメソッドを使って、Studentクラスをインスタンス化してます。その後、変数yamada,tanakaに対してintroduceメソッドを実行するように命令してます。その結果、Studentクラスのintroduceメソッドが実行されます。このように、classは定義したままでは使用できず、newメソッドによりインスタンス化して初めて、classのメソッドが使用できるようになります。例えるならば、クラスがたい焼き機械の型 インスタンスがたい焼きそのものというイメージです。

【Ruby入門】「to_s」、「to_i」について

Rubyでは文字列と数値は別のオブジェクトのため、連結ができません。 そのため、次のようなケースだとエラーが起きます。

puts "I am " + 27 + "years old."
# :in `+': no implicit conversion of Integer into String (TypeError)

そこで、to_sメソッドの登場です。

to_sメソッドとは

値を文字列に直して返すメソッドです。このメソッドを使うことにより、 データ型が一致してエラーが直ります。

puts "I am " + 27.to_s + " years old."
=> I am 27 years old  

一方、値を数値に直して返すメソッドは「to_i」メソッドを使います。 初心者がつまづきやすいポイントですので、この際に抑えておきましょう!

【Ruby入門】変数展開のメリットについて

変数展開のメリットについて

変数展開は文字列の連結と役割としては同じですが、1つ異なる点があります。 それは下のコードのように、文字列と数値を連携することができないことです。

age = 30
puts age + "歳になりました。"

# エラーになります。

しかし、次のように変数展開を用いると、数値の入った変数も問題なく文字列に含めることが可能です。

age = 30
age + "歳になりました。"

puts "#{age} + 歳になりました。"

# 「30歳になりました」と表示されます。

型としては、"#{変数名}"として使います。変数を文字列に含める場合は、基本的に変数展開を使うようにしましょう。

【Ruby入門】getsメソッドのデータ型エラーを解消するには

要件

-ユーザーが入力した値の1%分のポイントを表示する。 -ユーザーが入力した値が1000円以上の場合には、1%分のポイント+50ポイントを表示する。

【失敗例】

money = gets
point = money / 100

if money >= 1000
    puts point + 50
else
    puts point
end

次のような、エラーが表示されて処理が実行されません。 test02.rb:2:in <main>': undefined method/' for "1200\n":String (NoMethodError)

これは、getsメソッドに原因があります。getsメソッドはキーボードで入力した値を取得しますが、文字列として取得します。そのため、文字列を数値として計算しようとしたため、怒られてしまうのです。そのため、ここでは数値として値を取得してくれる.to_iメソッドを使いましょう!

money = gets.to_i
point = money / 100
if money >= 1000
    puts point + 50
else
    puts point
end

これにより、エラーが改善することが可能です!

【Ruby入門】getsとgets.chompの違い

getsとgets.chompのち外

gets

キーボードで入力した文字列を取得します。

gets.chompメソッド

キーボードで入力した文字列の改行コードを削除して取得します。

つまり、getsは改行が生じ、gets.chompは改行が生じません。 実際の例をみてみましょう!

# -*- coding: utf-8 -*-
name = gets
puts "こんにちは" + name + "さん"

getsメソッドを使った場合は、 " こんにちは○○ さん" と改行が生じます。それに比べgetsメソッドを使った場合は、

# -*- coding: utf-8 -*-
name = gets.chomp
puts "こんにちは" + name + "さん"
'''
"こんにちは○○さん"と改行が表示されずに表示されます。

【Ruby入門】ファイルの内容を一括で読み込み、表示する方法 

ファイルの内容を一括で読み込み、表示する手順

  • プログラムと同じディレクトリに「test.txt」をつくります。
  • 好きな言葉を入力して保存します。例)忘却は罪である。
  • 出力します。 実際にコードをみていきましょう。
# -*- coding: utf-8 -*-
# "test.txt"を読み込みモード(文字コード指定)で開く
file = open("test.txt", "r:UTF-8")

# ファイルの内容を一括で読み込み、表示する
# 「忘却は罪である。」と表示されます。
print file.read

# ファイルを閉じる
file.close

指定したファイルの名前とプログラムで指定したファイルが異なる場合または、 別ディレクトリにファイルが配置されている場合はエラーが生じるので、気おつけましょう!