3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RubyAdvent Calendar 2022

Day 7

たのしいRubyを勉強してみた

Last updated at Posted at 2022-11-26

たのしいRubyを勉強してみた 第一部

Green_helmet@bethlehem4099 2022年6月18日

Rubyの本、買ってきた。たのしいRuby、勉強しながらtwitterに投稿した文を加筆訂正してQiitaに投稿する。
Twitter、Green_helmet@bethlehem4099
Qiita、@dosaidon

参考文献

この記事は以下の情報を参考にして執筆しました。
-たのしいRuby、高橋征義、後藤裕蔵著、 まつもとゆきひろ監修、SBクリエイティブ株式会社、第6版2019年
-『たのしいRuby 第6版』サポートページ、ソースコード

はじめに

ここのところPythonでプログラムを書いていた。
でも、Pythonは計算は得意だがまとまったプログラムを作るのには向いてない気がしてRubyを勉強することにした。
もう一つは、Ractorと言う並列処理の機能がRubyに出来たと聞いたからだ。
そう、PythonはmacOSのプリインストールソフトから削除されてしまったがRubyは残っている。そしてGitHubとHomebrew最高。

Rubyの実行環境とインストール

パソコン環境

Ruby勉強の環境。二画面で実行環境と本や検索画面を表示出来て快適。でもM1 MacBook Airは接続できる外部モニターがデフォルトで1台なんだよな。だからIntel MacBook Proの出番がまだある。ただし動作は圧倒的にM1が快適。この構成に至るまでかなり試行錯誤した。

Intel MacBook Pro 2017,
M1 MacBook Air 2020,
LG 27inch monitor 4K, Sony 2k TV,
Logitech keyboard M380,
MX Anywhere 3 for Mac mouse

Windowsパソコン(第11世代のCore i5)も持っているが、CPUがIntelのパソコンとApple silicon Macを比較するといわゆるM1とかを搭載したパソコンの方が圧倒的に早くて快適だった。これは1CPUの能力の差なのでCPUコアの数が多くても体感は変わらない。HomebrewがWindowsには無かったので設定が面倒でWindowsにはRubyをインストールだけして使うのをやめてしまった。
Linux、なにそれ美味しいの?

モバイル環境

iPad 9, iPhone XR, iPhone SE2

スタバでRuby、電車でRuby、寝床でRuby用。

Green_helmet@bethlehem4099 6月21日

ソフトウエア

ターミナル、Command Line Tools、Homebrew、Ruby、CotEditor

ここに書いたソフトがこの順番で必要だがOSのバージョンやCPUの種類によって最初から入っているソフトがあるかもしれない。自分のMacではターミナルはLaunchpadにあったが、Command Line Toolsは無かった。インストールのやり方はここに出てきた単語をブラウザで検索してそれに従う。Homebrewが使えるようになるとあとは簡単。難しいことは無いがやり方を検索しながらのダウンロード・インストールに半日くらいかかった。
最後のCotEditorはApp storeからインストールした。軽くて見た目が綺麗な無料エディタ、文字コードの変換とか強い。
Vimねぇ、esc : wq! の呪文を知らないとパーティ全滅の憂き目にあう。
VScodeは一応入れてある。

Rubyist

iPhone、iPadのApp storeストアで購入、モバイル用

でははじめよう

新しい言語を勉強しようと思うとインストールが一番の難関だったりする。ここまで来れば勉強の半分は終わっている。
さて、この本ではプログラム言語Rubyの実行環境としてコマンドラインからrubyを起動する方法とirbを紹介している。

プリント print

MacのLaunchpadにあるターミナル>_アイコンをクリックして起動し、さらにプロンプト~ %(自分のMacBook Proではこれ)の右側にirbと呪文をタイプしてリターンを押してirbを起動する。これをコマンドラインというが実は正統派UNIXだったりする。
ふんふん、Rubyはprintで文字書くのね

irb(main):001:0> print("Hello, ruby.\n")
Hello, ruby.
=> nil

ここで固まった。
irbは何故=> nilを表示するのか謎。
なんと言うか、結果を印刷するだけでは無く式の戻り値も表示しているみたいだが、最初から混乱する。これからは=> nilは見ないことにする。

あとnilって何だ?
答え、nilは何も無い、NaNと同じ。

Green_helmet@bethlehem4099·6月22日

print, puts, p

つぎ。
何とRubyは印刷だけでprint, puts, pの3つもやり方がある

irb
~ % irb
irb(main):001:0> print("Hello, Ruby")
Hello, Ruby=> nil

irb(main):002:0>puts("Hello, Ruby")
Hello, Ruby
=> nil

irb(main):003:0> p("Hello, Ruby")
"Hello, Ruby"
=> "Hello, Ruby"

おまけに、()有りと無しが可能で6通り

irb
irb(main):004:0> print"Hello, Ruby"
Hello, Ruby=> nil

irb(main):005:0> puts"Hello, Ruby"
Hello, Ruby
=> nil

irb(main):006:0> p"Hello, Ruby"
"Hello, Ruby"
=> "Hello, Ruby"

さらにRubyでは文字列を囲むのにダブルクォート""とシングルクォート''を使える
この例だとどちらもダブルクォートが表示される。

irb
irb(main):007:0> print('Hello, Ruby')
Hello, Ruby=> nil

irb(main):008:0> puts('Hello, Ruby')
Hello, Ruby
=> nil

irb(main):009:0> p('Hello, Ruby')
"Hello, Ruby"
=> "Hello, Ruby"
irb
irb(main):010:0> print 'Hello, Ruby'
Hello, Ruby=> nil

irb(main):011:0> puts 'Hello, Ruby'
Hello, Ruby
=> nil

irb(main):012:0> p 'Hello, Ruby'
"Hello, Ruby"
=> "Hello, Ruby"

微妙に違う。

まあ要約すると、
()は有っても無くても良く、
printは改行が無く、
putsは改行があり、
pは"がそのまま出力され、'は"に変換されて出力されている。

う〜ん、これはもうRubyはあれである、あれ

Rubyはコンピュータ言語界の一蘭

天然とんこつラーメン専門店 一蘭 >(@ICHIRANJAPAN)/Twitter
「とんこつラーメン発祥の地(聖地) 福岡県にて昭和35年創業」

一蘭ラーメンを知らない人のためにお伝えすると、一蘭はトッピング全てを食べる人の好みに合わせて選択可能なのである
選べるのは味の濃さ、こってり度、にんにくの量、ネギの種類と有無、チャーシュー(焼き豚)の有無、秘伝のたれの量、麺のかたさ、さらに替え玉の有無など、そしてとても美味しい

Green_helmet@bethlehem4099·6月23日

Pythonは東京醤油系ラーメン言語

醤油ラーメンのトッピングはメンマとナルト、ねぎ、半熟卵、ほうれん草、チャーシュー、海苔に決まっている。オプションは無い(偏見)
これも美味しい。東京醤油系ラーメンのおすすめのお店。

onochan.jp
十条「玉屋」誰もが「懐かしの東京醤油ラーメン」というけど、
そんな短略的なものじゃない。このラーメンは何気ない振りを装っているけど、
洗練された味わいが潜んでいる。

  • 元祖 カレー研究家 小野員裕

Green_helmet@bethlehem4099·6月23日

C++はラーメン二郎系マシマシ言語

ラーメン二郎、出典: フリー百科事典『ウィキペディア(Wikipedia)』
ja.wikipedia.org、ラーメン二郎 - Wikipedia

Green_helmet@bethlehem4099·6月24日

pの感想

Rubyのpは良いな
デバッグの時に変数aを表示するのに

Ruby
>p a
1

でいける

Python
>print(a)
1
C
>printf("%d",a);
1

あと、いつも書式を書くのが面倒だと思っていたので

Ruby
>q a
a=1

とか作ってくれないだろうか。

メソッド

ところで、自分はprintメソッドという名前に違和感があるな
メソッドはクラスの定義の時に使うのではないか?
もしかしてクラスメソッドかな、それともインスタンスメソッドでコンストラクタを隠しているのか
それにRubyには関数がないのか
Green_helmet@bethlehem4099·6月25日

「日本語の表示」

学習のスタイルとして教科書の例題を見て適当に変えて自分でタイプして実行してみることにする。あと=>がわずらしいのでirbを使うのはやめて、拡張子が.rbのテキストファイルをCotEditorで作り、コマンドラインからRubyを実行するにやり方を変えた。そう、テキストファイルを保存する場所はMacintosh HDの中のユーザの中の自分の名前のフォルダだった。

makurano.rb

print "春はあけぼの。やうやう白くなりゆく山際、\n"
print "少し明かりて、紫だちたる雲の細くたなびきたる。\n"

コマンドラインから実行する。なお、➜ ~は自分のパソコンのコマンドプロンプト。

shell
➜  ~ ruby makurano.rb
春はあけぼの。やうやう白くなりゆく山際、
少し明かりて、紫だちたる雲の細くたなびきたる。

最新のmacOSで文字化けしない。偉い。
M1 MacBook Air, macOS Monterey 12.4

Green_helmet@bethlehem4099·6月25日

「数学的な関数」ちゃんと動く

math.rb
include Math
a=cos(PI/2)
b=sin(PI/4)
c=sqrt(2)
print "cos(PI/2)=",a,"\n"
print "sin(PI/4)=",b,"\n"
print "sqrt(2)=",c,"\n\n"
  ~ ruby math.rb
cos(PI/2)=6.123233995736766e-17
sin(PI/4)=0.7071067811865475
sqrt(2)=1.4142135623730951

Green_helmet@bethlehem4099·6月26日

「コメント」

comment.rb
=begin
「コメント」
「コメント」
「コメント」
=end

はい

「制御構造」

if then else end, while do endはお馴染み
3.times doは目新しい

jack.rb
3.times do
    puts "ジャック、食べてばかりで運動しないとチー牛になるよ。"
end
➜  ~ ruby betty.rb
ジャック、食べてばかりで運動しないとチー牛になるよ。
ジャック、食べてばかりで運動しないとチー牛になるよ。
文字数・・・

#大事な事なので3回言います

Green_helmet@bethlehem4099·6月26日

「便利なオブジェクト」の章に進もう

ArrayはC言語の配列とは違ってコンテナだな

int、double、str とか何でも入れられる。

Green_helmet@bethlehem4099·6月26日

シンボルは新しい。コロンはfooや"foo"から離してはいけない

symbol.rb
sym = :foo
sym2 = :"foo"
sym_s = sym.to_s
sym2_s = "foo".to_s
puts sym, sym2
puts sym_s, sym2_s

Hashは辞書型か

# hash.rb
adress={name:"松本", furigana:"マツモト"}
p adress[:name]
p adress[:furigana]
% ruby hash.rb
"松本"
"マツモト"

う〜ん、混乱するな

パターンマッチング

pattern.rb
p /パターン/ =~ "マッチングしたい文字列"
p /Ruby/ =~ "Yet another ruby newcomer"
p /ruby/ =~ "Yet another ruby newcomer"
p /Ruby/i =~ "Yet another ruby newcomer"
pattern.rb
 nil
 nil
 12
 12

何文字目で一致したかがわかる。

コマンドラインの引数を整数計算

arg_arith.rb
# arg_arith.rb
num0=ARGV[0].to_i
num1=ARGV[1].to_i
puts "#{num0}+#{num1}=#{num0+num1}"
puts "#{num0}-#{num1}=#{num0-num1}"
puts "#{num0}*#{num1}=#{num0*num1}"
puts "#{num0}/#{num1}=#{num0/num1}"
➜ruby arg_arith.rb 5 3
5+3=8
5-3=2
5*3=15
5/3=1

Green_helmet@bethlehem4099·7月2日

テキストファイルも読める
まあ、C言語を使ったことがあればごく普通

read_text.rb
# read_text.rb
file_name=ARGV[0]
file=File.open(file_name)
text=file.read
puts text
file.close

Green_helmet@bethlehem4099·7月6日
つぎ

GREP

関数をライブラリ化

simple_grep.rb
# simple_grep.rb
def simple_grep(pat, filename)
    pattern=Regexp.new(pat)
    file=File.open(filename)
    file.each_line do |line|
        if pattern =~ line
            puts line
            end
        end
    file.close
    end

use_grep.rb
# use_grep.rb
require_relative 'simple_grep'
simple_grep(ARGV[0], ARGV[1])

この2つのファイルを作り、ユーザの中の自分のログイン名のフォルダに保存する。

command line
~ % ruby use_grep.rb "line" simple_grep.rb
    file.each_line do |line|
        if pattern =~ line
            puts line

コマンドラインでパターン"line"とファイル名simple_grep.rbを指定して上記のように実行する。うん使いやすい。

これで「たのしいRuby」の第一部終了

Green_helmet@bethlehem4099·7月7日

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?