Ruby勉強輪講第1回 第2章の解説
目次• Rubyとは?•   字句構造•   構文構造•   ファイル構造•   エンコーディング•   プログラムの実行
Rubyとは!?• 日本で開発されたプログラミング言語• Rubyはオブジェクト指向言語• 利用した多くのプログラマが、エレガントで楽  しいと評価
第2章 Rubyプログラムの構造と実行• 字句構造• 構文構造• ファイル構造• プログラムのエンコーディング• プログラムの実行
1 字句構造• Rubyは単語や記号を順番に読んでプログラムを  解析する• ここでは、その単語とか記号についての説明を  する• コメント、リテラル、記号類、識別子、キー  ワード
コメントと埋め込みドキュメント• #を書いたら、その行の終わりまでがコメント  になる• 埋め込みドキュメントは、=beginと=endで挟み  こんだ部分がコメントになる• 行頭に書かないと効果なし• 使わないソースコードを隠すのに便利
print("Hello worldn") # ()は省略できる# 使用文字コードがUTF-8(Bomなし)なら、これで日本語が使えるrequire "kconv"#putsは改行付きのprintputs(Kconv.tosjis("日本語テス...
########## 2 =beginと=endについて ##########=begin ここはコメントこの間もコメント=end これもコメント=beginputs(Kconv.tosjis("わんこn「これで隠したいソースコードが隠せる  ...
ドキュメント用コメント• Rubyプログラムは、メソッド、クラス、モ  ジュールの定義の前に特別な形式のコメントを  入れることで、APIドキュメントを組み込むこ  とができる• 各行の先端が、#になっている複数行コメント  の形式で書かれるの...
=begin rdocrdoc用コメントは、wikiのものと似た単純なマークアップ文法を使っている段落は空行で分割する= 見出し見出しの先頭は = 記号== 小見出し上の行は小見出しを作る=== さらに小さい見出しさらに下のレベルの小見出しを作...
リテラル• Rubyソースコードに現れる値のこと• 数値、文字列、正規表現の3種類ある• 詳しくは3章で説明
########## 3 リテラルについて ########### この下の例を見て、雰囲気だけ感じておこう1     #整数のリテラル0.1    #小数点リテラルone #文字列リテラル"two" #別の種類の文字列リテラル/three/ ...
記号類• Rubyは、記号類をいろんな目的のために使って  いる• 毎度おなじみの、加算の+とか、乗算の*とか、  論理和の||とか、ほとんどの演算子には、記号  を使っている• 次の演算子表は、優先度の高いから低い順
演算子                     項数   結合性   再定義   演算!~+                     1    右     ○     論理NOT ビット単位補数 単項プラス**                 ...
識別子• 識別子とは名前のこと• 変数、メソッド、クラスなどに名前を与えるた  めに識別子を使っている• 英数字や_(アンダースコア)で構成される
########## 5 識別子について ########### 英数字(数字を一番前にしたらだめ)か_(アンダースコア)で構成さ  れる# 空白や印字不能文字は使えない# AからZの大文字になっている識別子は、定数であるi=0        ...
キーワード• Rubyには、ifとかforのように、特別な意味をも  つキーワードがある
########## 6 キーワードについて ##########特別扱いされるキーワードたち__LINE__ case ensure not then__ENCODING__ class false or true__FILE__ def f...
空白と改行• 空白はほとんどの場合は無視され、プログラム  を見やすくするために使われる• ただ、すべての空白が無視されるわけではない  ことを、知っておこう• 一行に複数の文を入れる場合を除いて、セミコ  ロン(;)は書く必要が無い• また、...
########## 7 空白と改行 ##########v=1+2+3+4+5+6+7+8+9+10 # 空白のないぎゅうぎゅう文v = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 # 空白のあるスカスカ文 ...
2 構文構造• Rubyの基本単位は式で、それを評価して値を生  成する• 簡単な式は、値を直接表現するもの• trueやfalseなど、一部のキーワードも式• 変数参照も式で、評価結果は変数の値になる
########## 8 構文構造について ###########リテラルは式だそうだ#複雑な値が書けるリテラル[1,2,3]     # 配列リテラル{1=>"one",2=>"two"} # ハッシュリテラル1..3       # 範囲リ...
# 以下の文も、専門的にいえば式ですprint(Kconv.tosjis"whileテスト")x = 0 # 初期化while x < 10 do          # この式がtrueである間は 以下の文を実行 if x == 5 then ...
Rubyのブロック構造• Rubyはブロックコードをもっている• ブロックコードはキーワードや記号で区切られ  ている
########## 9 ブロック構造について ##########3.times { print(Kconv.tosjis“はい…”) } # 中かっこで囲んだ場合print"n"           # 改行3.times do      ...
#図式的な例module Stats                 # モジュール class Dataset               # モジュール内のクラス  def initialize(filename)      # クラス内の...
3 ファイル構造• Rubyコードファイルにどのような構造を与えな  いといけないかについて、ルールはごくわずか• このルールは、Rubyのデプロイと関係があるが、  言語自体とは直接関係ない• デプロイ=デプロイメント  ネットワークを通じて...
ファイル構造その1• まず、Unix系OSにRuby実行方法を示  す”shebang”コメントがついている場合、そのコ  メントは第1行になければならない#!/usr/bin/ruby -w   (shebang コメント)
ファイル構造その2• 第2に、”coding”コメントを含む場合、そのコ  メントは第1行か第2行になければならない# -*- coding: utf-8 -*- (coding コメント)
ファイル構造その3• 第3に、前後に空白のない__END__トークン  だけを含む行がある場合、その位置でファイル  の処理を中止する__END__
#!/usr/bin/ruby -w       (shebang コメント)# -*- coding: utf-8 -*- (coding コメント)require socket   #(ネットワークライブラリのロード)#ここにプログラムコー...
4 プログラムのエンコーディング• Rubyの字句解析ルールは、ASCIIキャラクタ  セットの文字を使って定義されている• ASCII文字を完全に表現できるエンコーディン  グであれば、インタープリタはどんなエンコー  ディングを使っているフ...
日本語を使うとき• ファイルがUTF-8を使って書かれている場合、  コメント、文字列、正規表現には、任意の  Unicode文字を使える• ファイルが日本のSJIS、EUCエンコーディング  を使っている場合には、漢字を含む文字列が使  える
# 使用文字コードがUTF-8(Bomなし)なら、これで日本語が使えるrequire "kconv"#putsは改行付きのprintputs(Kconv.tosjis("日本語テスト"))
5 プログラムの実行• Rubyはスクリプト言語• 文は上から下へと順に実行されるが、制御構造  で変更でき、いろんな条件に基づいて実行する  ことができる• 特別なmainメソッドはない
プログラムの終わり• 以下の条件のどれかを満たせば、プログラムは  終了する• Rubyプログラムを終了させるような文を実行す  る• ファイルの末尾に到達する• __END__トークンの書かれた行を読みだす
おつかれさまでした
Upcoming SlideShare
Loading in …5
×

Ruby講座一回目

909 views
778 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
909
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Ruby講座一回目

  1. 1. Ruby勉強輪講第1回 第2章の解説
  2. 2. 目次• Rubyとは?• 字句構造• 構文構造• ファイル構造• エンコーディング• プログラムの実行
  3. 3. Rubyとは!?• 日本で開発されたプログラミング言語• Rubyはオブジェクト指向言語• 利用した多くのプログラマが、エレガントで楽 しいと評価
  4. 4. 第2章 Rubyプログラムの構造と実行• 字句構造• 構文構造• ファイル構造• プログラムのエンコーディング• プログラムの実行
  5. 5. 1 字句構造• Rubyは単語や記号を順番に読んでプログラムを 解析する• ここでは、その単語とか記号についての説明を する• コメント、リテラル、記号類、識別子、キー ワード
  6. 6. コメントと埋め込みドキュメント• #を書いたら、その行の終わりまでがコメント になる• 埋め込みドキュメントは、=beginと=endで挟み こんだ部分がコメントになる• 行頭に書かないと効果なし• 使わないソースコードを隠すのに便利
  7. 7. print("Hello worldn") # ()は省略できる# 使用文字コードがUTF-8(Bomなし)なら、これで日本語が使えるrequire "kconv"#putsは改行付きのprintputs(Kconv.tosjis("日本語テスト")) # 日本語テスト########## 1 コメントについて ########### #を書けば、そこから先はコメントi = "#これはコメントじゃない…"puts(Kconv.tosjis(i)) # ()を省略すると 単語と合体するので省略でき ない
  8. 8. ########## 2 =beginと=endについて ##########=begin ここはコメントこの間もコメント=end これもコメント=beginputs(Kconv.tosjis("わんこn「これで隠したいソースコードが隠せる わん」"))puts(Kconv.tosjis("にゃんこn「それじゃあにゃんこ達のこの会話も 隠れてるのかにゃ?」"))puts(Kconv.tosjis("わんこn「そういうことになるわん…」"))=end# =begin 機能していない=beginと=endprint("ruby and sapphire and emeraldn")# =end
  9. 9. ドキュメント用コメント• Rubyプログラムは、メソッド、クラス、モ ジュールの定義の前に特別な形式のコメントを 入れることで、APIドキュメントを組み込むこ とができる• 各行の先端が、#になっている複数行コメント の形式で書かれるのと、=begin rdocを先頭とす る埋め込みドキュメントとして書くこともでき る
  10. 10. =begin rdocrdoc用コメントは、wikiのものと似た単純なマークアップ文法を使っている段落は空行で分割する= 見出し見出しの先頭は = 記号== 小見出し上の行は小見出しを作る=== さらに小さい見出しさらに下のレベルの小見出しを作る(以下同様)= 例示 コードフォントでインデントされた行がそのまま表示される しかし見出しとリストをインデントしないように注意= リストとフォントリストの項目の先端は*か- フォントは記号かHTMLで示す* _斜体_または<i>複数語の斜体</i>* *太字*または<b>複数語の太字</b>* +コード+または<tt>複数語のコード</tt>1. 番号付きリストの先端は数字99. 数字はいつでもよく、連番である必要はない1. リストをネストすることはできない項目リストの項目は角かっこで囲む[項目 1] 項目1の説明[項目 2] 項目2の説明=end
  11. 11. リテラル• Rubyソースコードに現れる値のこと• 数値、文字列、正規表現の3種類ある• 詳しくは3章で説明
  12. 12. ########## 3 リテラルについて ########### この下の例を見て、雰囲気だけ感じておこう1 #整数のリテラル0.1 #小数点リテラルone #文字列リテラル"two" #別の種類の文字列リテラル/three/ #正規表現リテラル
  13. 13. 記号類• Rubyは、記号類をいろんな目的のために使って いる• 毎度おなじみの、加算の+とか、乗算の*とか、 論理和の||とか、ほとんどの演算子には、記号 を使っている• 次の演算子表は、優先度の高いから低い順
  14. 14. 演算子 項数 結合性 再定義 演算!~+ 1 右 ○ 論理NOT ビット単位補数 単項プラス** 2 右 ○ 指数- 1 右 ○ 単項マイナス*/% 2 左 ○ 乗算 除算 剰余+- 2 左 ○ 加算 減算<< >> 2 左 ○ ビット単位左シフト ビット単位右シフト& 2 左 ○ ビット単位AND|^ 2 左 ○ ビット単位OR ビット単位XOR< <= >= > 2 左 ○ 順序== === != =~ <=> 2 無 ○ 等値 パターンマッチ 比較&& 2 左 × 論理AND|| 2 左 × 論理OR・・ ・・・ 2 無 × 範囲作成および論理フリップフロップ?: 3 右 × 条件rescue 2 左 × 例外処理修飾子= 2 右 × 代入**= *= /= %= += -=<<= >>=&&= &= ||= ^=defined? 1 無 × 変数定義と型のテストnot 1 右 × 論理NOT(低優先順位)and or 2 左 × 論理AND 論理OR(低優先順位)if unless while until 2 無 × 条件分枝 繰り返し修飾子
  15. 15. 識別子• 識別子とは名前のこと• 変数、メソッド、クラスなどに名前を与えるた めに識別子を使っている• 英数字や_(アンダースコア)で構成される
  16. 16. ########## 5 識別子について ########### 英数字(数字を一番前にしたらだめ)か_(アンダースコア)で構成さ れる# 空白や印字不能文字は使えない# AからZの大文字になっている識別子は、定数であるi=0 #forループとかでよく使用j=0 #二重forループとかでよく使用z2 = 0 #zを既に識別子として使っているときによく使用okane = 315 #お金の数値を入れたいときに使用するかも_namae = "ada" #アンダースコアが先頭の識別子PI =3.14 #大文字だから定数PI = 3.00 #定数を変更しようとすると警告がでる(エラーではな い)
  17. 17. キーワード• Rubyには、ifとかforのように、特別な意味をも つキーワードがある
  18. 18. ########## 6 キーワードについて ##########特別扱いされるキーワードたち__LINE__ case ensure not then__ENCODING__ class false or true__FILE__ def for redo undefBEGIN defined? if rescue unlessEND do in retry untilalias else module return whenand elsif next self whilebegin end nil super yield行頭に含まれている場合のみ特別扱いするキーワードに近いトークン=begin =end __END__
  19. 19. 空白と改行• 空白はほとんどの場合は無視され、プログラム を見やすくするために使われる• ただ、すべての空白が無視されるわけではない ことを、知っておこう• 一行に複数の文を入れる場合を除いて、セミコ ロン(;)は書く必要が無い• また、一行で文が完全じゃない場合、次の行も 解析を続ける
  20. 20. ########## 7 空白と改行 ##########v=1+2+3+4+5+6+7+8+9+10 # 空白のないぎゅうぎゅう文v = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 # 空白のあるスカスカ文 結 果は同じx1 = 1 + #文が未完結1x2 = 1 #文が完結+1print("x1 = ");puts(x1);print("x2 = ");puts(x2)
  21. 21. 2 構文構造• Rubyの基本単位は式で、それを評価して値を生 成する• 簡単な式は、値を直接表現するもの• trueやfalseなど、一部のキーワードも式• 変数参照も式で、評価結果は変数の値になる
  22. 22. ########## 8 構文構造について ###########リテラルは式だそうだ#複雑な値が書けるリテラル[1,2,3] # 配列リテラル{1=>"one",2=>"two"} # ハッシュリテラル1..3 # 範囲リテラル#式の見本1 # 値が直接表現された式x # これも式x = 1 # 代入式x = x + 1 # 2つの演算を含む式
  23. 23. # 以下の文も、専門的にいえば式ですprint(Kconv.tosjis"whileテスト")x = 0 # 初期化while x < 10 do # この式がtrueである間は 以下の文を実行 if x == 5 then # この式がtrueなら print(Kconv.tosjis"ifテスト") # この文を実行せよ end # 条件分木の終了 print(x) # この文を実行 x += 1 # この文も実行end # 繰り返しの終了print"n"# これらの文も、専門的にいえば式です
  24. 24. Rubyのブロック構造• Rubyはブロックコードをもっている• ブロックコードはキーワードや記号で区切られ ている
  25. 25. ########## 9 ブロック構造について ##########3.times { print(Kconv.tosjis“はい…”) } # 中かっこで囲んだ場合print"n" # 改行3.times do # do endで囲んだ場合 print(Kconv.tosjis"はい…")endprint"n" # 改行1.upto(10) do |x| print xend# ブロックには、正式にブロックと呼ばれるものと、本体と呼ばれるも のがある# 本体は、クラス定義、メソッド定義、whileループなどの内容を構成す る文のリストにすぎない# Rubyでは、本体は中かっこで囲まれない
  26. 26. #図式的な例module Stats # モジュール class Dataset # モジュール内のクラス def initialize(filename) # クラス内のメソッド IO.foreach(filename) do |line| # メソッド内のブロック if line[0,1] == "#" # ブロック内のif文 next # ifの中の単純な文 end # ifの終わり end # ブロックの終わり end # メソッドの終わり end # クラス本体の終わりend # モジュール本体の終わり
  27. 27. 3 ファイル構造• Rubyコードファイルにどのような構造を与えな いといけないかについて、ルールはごくわずか• このルールは、Rubyのデプロイと関係があるが、 言語自体とは直接関係ない• デプロイ=デプロイメント ネットワークを通じて提供されるサービスを、 利用可能な状態にすること
  28. 28. ファイル構造その1• まず、Unix系OSにRuby実行方法を示 す”shebang”コメントがついている場合、そのコ メントは第1行になければならない#!/usr/bin/ruby -w (shebang コメント)
  29. 29. ファイル構造その2• 第2に、”coding”コメントを含む場合、そのコ メントは第1行か第2行になければならない# -*- coding: utf-8 -*- (coding コメント)
  30. 30. ファイル構造その3• 第3に、前後に空白のない__END__トークン だけを含む行がある場合、その位置でファイル の処理を中止する__END__
  31. 31. #!/usr/bin/ruby -w (shebang コメント)# -*- coding: utf-8 -*- (coding コメント)require socket #(ネットワークライブラリのロード)#ここにプログラムコード__END__#(コードの終わりを示すマーク)#これでプログラム終了 以降は実行されない#プログラムデータ# IO ストリームオブジェクトDATAを使って読み込むことができる
  32. 32. 4 プログラムのエンコーディング• Rubyの字句解析ルールは、ASCIIキャラクタ セットの文字を使って定義されている• ASCII文字を完全に表現できるエンコーディン グであれば、インタープリタはどんなエンコー ディングを使っているファイルでも処理できる• インタープリタ=プログラミング言語で書かれ たソースコード
  33. 33. 日本語を使うとき• ファイルがUTF-8を使って書かれている場合、 コメント、文字列、正規表現には、任意の Unicode文字を使える• ファイルが日本のSJIS、EUCエンコーディング を使っている場合には、漢字を含む文字列が使 える
  34. 34. # 使用文字コードがUTF-8(Bomなし)なら、これで日本語が使えるrequire "kconv"#putsは改行付きのprintputs(Kconv.tosjis("日本語テスト"))
  35. 35. 5 プログラムの実行• Rubyはスクリプト言語• 文は上から下へと順に実行されるが、制御構造 で変更でき、いろんな条件に基づいて実行する ことができる• 特別なmainメソッドはない
  36. 36. プログラムの終わり• 以下の条件のどれかを満たせば、プログラムは 終了する• Rubyプログラムを終了させるような文を実行す る• ファイルの末尾に到達する• __END__トークンの書かれた行を読みだす
  37. 37. おつかれさまでした

×