Newer
Older
Ruby / my_ruby_guide.txt
@WATANABE Haruki WATANABE Haruki on 15 Jan 2025 10 KB 2025-01-15 21:07:30
####print
###1
##説明
引数をすべて画面に出力(print)するメソッド。
文字列以外が与えられた場合は to_s した結果を、引数を省略した場合は変数 $_ の値を出力する。

 Kernel モジュールに定義されているものを取り上げる。
###2
##構文
 print(*arg) -> nil
すなわち
 print(出力したいもの) -> nil
##引数
 *arg
出力したいものを指定する。複数指定可。
##戻り値
 nil
###3
##用例1

引数を出力する。(括弧)は省略できる。

print("ほげ")         # ほげ => nil

print "ほげ"          # ほげ => nil

print "ふー", "ばー"  # ふーばー => nil

print nil             #  => nil

gets
print                 # (getsで取得した内容) => nil


文字列以外を指定した場合↓

print 123        # 123 => nil

var = 123
print var        # 123 => nil

print [1, 2, 3]  # [1, 2, 3] => nil
###4
##用例2
 $, (出力フィールドセパレータ)と $\ (出力レコードセパレータ)との関係

print 123456      # 123456 => nil
print 1, 23, 456  # 123456 => nil

$, = "/"

print 123456      # 123456 => nil 
print 1, 23, 456  # 1/23/456 =>nil

$\ = "end"

print 123456      # 123456end => nil
print 1, 23, 456  # 1/23/456end => nil
###5
##例外
 IOError
標準出力が書き込み用にオープンされていない。

 Errno::EXXX::
出力に失敗した。
XXXには大文字英数字が入る。
##一口コメント
printに引数指定しなかったときの挙動をはじめて知った…
###6
##関連
puts
p
to_s
$_
$,
$\
$stdscr
$stdout
####puts
###1
##説明
画面に文字列を出力(put string)するメソッド。
 print と違って、出力するとき、それぞれの引数の最後に改行 \n をつける。
引数を指定しなかった場合は改行のみを出力する。

 Kernel モジュールに定義されているものを取り上げる。

読み方は「プットエス」(たぶん)。
###2
##構文
 puts(*arg) -> nil
すなわち
 puts(出力したいもの) -> nil
##引数
 *arg
出力するものを指定する。複数指定可。
##戻り値
 nil
###3
##用例
引数に渡されたものを改行付きで出力する。(括弧)は省略できる。改行で終わっている場合はそのまま出力。

puts("ほげ")  # ほげ
              # => nil
puts "ほげ"   # ほげ
              # => nil
puts "ほげ\n" # ほげ
              # => nil


引数を省略した、または空文字列や nil を指定したときは、改行のみを出力。

puts      #
          # => nil
puts ""   #
          # => nil
puts nil  #
          # => nil


複数(配列で)渡された場合は、要素と改行を順に出力する。

puts ["ふー", "ばー"]  # ふー
                       # ばー
		       # => nil
		     
puts "ふー", "ばー"    # ふー
                       # ばー
		       # => nil


配列や文字列ではない場合は、 to_ary からの to_s による変換を試みる。

puts 1..3  # 1
           # 2
	   # 3
	   # => nil
###4
##例外
 IOError
標準出力が書き込み用にオープンされていない。

 Errno::EXXX::
出力に失敗した。
XXXには大文字英数字が入る。
##一口コメント
よく使うので重宝しています。
###5
##関連
print
p
to_ary
to_s
$stdscr
$stdout
####p
###1
##説明
引数を人間にわかりやすい形に、その"型"がわかるように整形して、改行と順番に出力するメソッド。
引数を指定しなかった場合は特に何もしない。
主にデバッグに使用される。

引数を *arg とおくと、  print arg[0].inspect, "\n", arg[1].inspect, "\n", ...  にほぼ等しい。

定義されている場所は Kernel モジュール。

###2
##構文
 p(*arg) -> Object | Array
すなわち
 p(出力したいもの、値や型を知りたいもの) -> 指定した引数
##引数
 *arg
値や型を知りたいものを指定する。複数指定可。
##戻り値
指定した引数が一つのときはそれ自身(Object)、
複数のときはそれらの配列(Array)を返す。
###3
##用例1
引数を、型がわかるように出力する。(括弧)は省略できる。

p(123)        # 123
              # => 123
p("123")      # "123"
              # => "123"

p 123         # 123
              # => 123
p "123"       # "123"
              # => "123"

p 123, "123"  # 123
              # "123"
	      # => [123, "123"]
###4
##用例2
いろいろな場合の p を見てみよう〜

文字列
p "aiueo"  # "aiueo"
           # => "aiueo"
p 'aiueo'  # "aiueo"
           # => "aiueo"

p "12#{34}56\n7890"  # "123456\n7890"
                     # => "123456\n7890"
p '12#{34}56\n7890'  # "12#{34}56\\n7890"
                     # => "12#{34}56\\n7890"


数(整数、浮動小数点数など)
p 123    # 123
         # => 123
p 12.34  # 12.34
         # => 12.34


配列
p ['a', 1, 0.12]  # ["a", 1, 0.12]
		  # => ["a", 1, 0.12]


ハッシュ
p {a: 1, b: 2, c: 3}        # => SyntaxError
p {:a=>1, :b=>2, :c=>3}     # => SyntaxError
p {"a"=>1, "b"=>2, "c"=>3}  # => SyntaxError      曰くローカル変数やメソッドじゃないとだめらしい...なんでだろう?

hash = {a: 1, b: 2, c: 3}
p hash                      # {:a=>1, :b=>2, :c=>3}
                            # => {:a=>1, :b=>2, :c=>3}      いけた...なんで??


...などなど(以下略)
###5
##用例3
 puts などとの比較

puts ""   #
          # => nil
print ""  # => nil
p ""      # ""
          # => ""

puts   #
       # => nil
print  # (変数 $_ を出力) => nil
p      # => nil
###6
##例外
 IOError
標準出力が書き込み用にオープンされていない。

 Errno::EXXX::
出力に失敗した。
XXXには大文字英数字が入る。
###7
##面白い?使い方
式と p

p(123 + 654)    # 777
                # => 777      ( p の引数の 123 + 654 を評価し、計算結果の 777 が出力される)

p 123 + 654     # 777
                # => 777      (                            〃                             )

p (123 + 654)   # 777
                # => 777      ( p の引数の (123 + 654) を評価し、計算結果の 777 が出力される)

p((123 + 654))  # 777
                # => 777      (                             〃                              )


(p 123) + 654   # 123
                # => 777      ( p 123 により 123 が出力、その戻り値の 123 に 654 を足した 777 が返ってくる)


p p p "aiueo"  # "aiueo"
               # "aiueo"
	       # "aiueo"
	       # => "aiueo"      ( p (p (p "aiueo")) と同じ、p "aiueo" の戻り値を p した戻り値を p している。ややこしや)
##一口コメント
意外と使ってみると便利。
###8
##備考
ハッシュのやつ、なにか判明次第ここに書き込みます…
###9
##関連
inspect
puts
print
$stdscr
$stdout
####gets
###1
##説明
文字列を読み込む(get string)メソッド。
 ARGF から1行読み込んで、その値を返す。
 ARGF に何もセットされていないときは標準入力を使う。
引数を指定すると、改行ではなくその文字列が現れるところで区切る。
読み込んだ文字列は変数 $_ にも格納される。
 C-d で読み込みを中断し、その時点で読み込んでいた文字列を返す。

 Kernel モジュールに定義されているものを取り上げる。

読み方は「ゲットエス」(たぶん)。
###2
##構文
 gets(rs = $/) -> String | nil
すなわち
 gets(区切る文字) -> 読み込んだ文字列 または nil
##引数
 rs
区切る文字を指定する。デフォルト値は変数 $/ ( $/ の既定値は "\n" )。
 nil を指定すると、読み込んでいるファイルの終わりまで全て読み込む。
標準入力を使っているときは C-d で中断するまで止まらない。
 "" (空文字列)を指定するとパラグラフモードになり、2連続の改行 \n まで読み込む。
(整数を指定するとそのバイト数だけ読み込む。確証はない。)
##戻り値
読み込んだ文字列を返す。
ファイルの終わり( EOF …"E"nd "O"f "F"ile)に到達したときや、
標準入力に何も入力しないまま C-d で中断したときは nil を返す。
###3
##用例1
標準入力を使う例:

引数を指定すると面白いことが起こる。
実際に irb を開いて実行するとわかりやすい。


gets  # => "(入力した内容)\n"


gets("あああ")  #野菜が(改行)キライ(改行)だああああうそです(改行) と入力 => "野菜が\nキライ\nだあああ"
gets            #さっき入力した文字列のうち余ったものを(改行で区切ったところまで)返す  => "あうそです\n"


gets(10)  #くぁwせdrftgyふじこlp(改行) と入力 => "くぁwせ"               …く→3byte、ぁ→3byte、w→1byte、せ→3byte  合計10byte
gets      #余りを返す                         => "drftgyふじこlp\n"


gets(10)  #あああああ(改行) と入力 => "ああああ"      …あ→3byte、あ×3→9byte、あ×4→12byte
gets      #                        => "あ\n"
###4
##用例2
 ARGF を使う例:

ARGV << vegetables.txt << fruits.txt
gets           # => "tomato\n"
gets("")       # => "cucumber\ncarrot\n\n"
gets(nil)      # => "cabbage\nlettus\n\nradish\nzucchini"
gets("apple")  # => "banana\napple"
gets(6)        # => "\nkiwi\n"
gets(nil)      # => "mango\norange"
gets           # => nil


---vegetables.txt---
tomato
cucumber
carrot

cabbage
lettus

radish
zucchini
--------------------

-----fruits.txt-----
banana
apple
kiwi
mango
orange
--------------------
###5
##例外
 Errno::EXXX::
読み込みに失敗した。
XXXには大文字英数字が入る。
###6
##よくある便利な使い方
 chomp メソッドと組み合わせると…

例) puts "名前を入力: "
    name = gets.chomp  #←名前にはいらない改行 \n を取り除ける!


 Enter待ち

例) puts "Enterキーで進む" ; gets
    puts "後悔しませんか?" ; gets  #←Enter(Return)で改行しないと進めないのを利用している
    1000.times { print "あ" }
##一口コメント
標準入力以外の使い方や、引数の存在をはじめて知った。
###7
##関連
ARGF
$/
$stdin
readlines
readline
####chomp
####to_i
####to_f
####to_s
####to_a
####to_h
####to_sym
####printf
####+
####-
####*
####/
####**
####=
####if
####unless
####case
####while
####until
####for
####break
####next
####redo
####retry
####raise
####begin
####return
####BEGIN
####END