狠狠撸

狠狠撸Share a Scribd company logo
Ruby勉強輪講
第1回 第2章の解説
目次

? Rubyとは?

?   字句構造
?   構文構造
?   ファイル構造
?   エンコーディング
?   プログラムの実行
Rubyとは!?
? 日本で開発されたプログラミング言語

? Rubyはオブジェクト指向言語

? 利用した多くのプログラマが、エレガントで楽
  しいと評価
第2章 Rubyプログラムの構造と実行
? 字句構造

? 構文構造

? ファイル構造

? プログラムのエンコーディング

? プログラムの実行
1 字句構造
? Rubyは単語や記号を順番に読んでプログラムを
  解析する


? ここでは、その単語とか記号についての説明を
  する

? コメント、リテラル、記号類、識別子、キー
  ワード
コメントと埋め込みドキュメント
? #を書いたら、その行の終わりまでがコメント
  になる

? 埋め込みドキュメントは、=beginと=endで挟み
  こんだ部分がコメントになる

? 行頭に書かないと効果なし

? 使わないソースコードを隠すのに便利
print("Hello worldn") # ()は省略できる



# 使用文字コードがUTF-8(Bomなし)なら、これで日本語が使える
require "kconv"
#putsは改行付きのprint
puts(Kconv.tosjis("日本語テスト")) # 日本語テスト

########## 1 コメントについて ##########
# #を書けば、そこから先はコメント
i = "#これはコメントじゃない…"
puts(Kconv.tosjis(i)) # ()を省略すると 単語と合体するので省略でき
   ない
########## 2 =beginと=endについて ##########
=begin ここはコメント
この間もコメント
=end これもコメント

=begin
puts(Kconv.tosjis("わんこn「これで隠したいソースコードが隠せる
  わん」"))
puts(Kconv.tosjis("にゃんこn「それじゃあにゃんこ達のこの会話も
  隠れてるのかにゃ?」"))
puts(Kconv.tosjis("わんこn「そういうことになるわん…」"))
=end

# =begin 機能していない=beginと=end
print("ruby and sapphire and emeraldn")
# =end
ドキュメント用コメント
? Rubyプログラムは、メソッド、クラス、モ
  ジュールの定義の前に特別な形式のコメントを
  入れることで、APIドキュメントを組み込むこ
  とができる

? 各行の先端が、#になっている複数行コメント
  の形式で書かれるのと、=begin rdocを先頭とす
  る埋め込みドキュメントとして書くこともでき
  る
=begin rdoc


rdoc用コメントは、wikiのものと似た単純なマークアップ文法を使っている


段落は空行で分割する


= 見出し


見出しの先頭は = 記号


== 小見出し
上の行は小見出しを作る
=== さらに小さい見出し
さらに下のレベルの小見出しを作る(以下同様)


= 例示


 コードフォントでインデントされた行がそのまま表示される
  しかし見出しとリストをインデントしないように注意


= リストとフォント


リストの項目の先端は*か- フォントは記号かHTMLで示す
* _斜体_または<i>複数語の斜体</i>
* *太字*または<b>複数語の太字</b>
* +コード+または<tt>複数語のコード</tt>


1. 番号付きリストの先端は数字
99. 数字はいつでもよく、連番である必要はない
1. リストをネストすることはできない


項目リストの項目は角かっこで囲む
[項目 1] 項目1の説明
[項目 2] 項目2の説明
=end
リテラル
? Rubyソースコードに現れる値のこと

? 数値、文字列、正規表現の3種類ある

? 详しくは3章で説明
########## 3 リテラルについて ##########
# この下の例を見て、雰囲気だけ感じておこう
1     #整数のリテラル
0.1    #小数点リテラル
'one' #文字列リテラル
"two" #別の種類の文字列リテラル
/three/ #正規表現リテラル
記号類
? Rubyは、記号類をいろんな目的のために使って
  いる

? 毎度おなじみの、加算の+とか、乗算の*とか、
  論理和の||とか、ほとんどの演算子には、記号
  を使っている

? 次の演算子表は、優先度の高いから低い順
演算子                     項数   結合性   再定義   演算
!~+                     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    無     ×     条件分枝 繰り返し修飾子
識別子
? 識別子とは名前のこと

? 変数、メソッド、クラスなどに名前を与えるた
  めに識別子を使っている

? 英数字や_(アンダースコア)で構成される
########## 5 識別子について ##########
# 英数字(数字を一番前にしたらだめ)か_(アンダースコア)で構成さ
  れる
# 空白や印字不能文字は使えない
# AからZの大文字になっている識別子は、定数である
i=0         #forループとかでよく使用
j=0         #二重forループとかでよく使用
z2 = 0       #zを既に識別子として使っているときによく使用
okane = 315     #お金の数値を入れたいときに使用するかも
_namae = "ada" #アンダースコアが先頭の識別子
PI =3.14      #大文字だから定数
PI = 3.00     #定数を変更しようとすると警告がでる(エラーではな
  い)
キーワード
? Rubyには、ifとかforのように、特別な意味をも
  つキーワードがある
########## 6 キーワードについて ##########
特別扱いされるキーワードたち
__LINE__ case ensure not then
__ENCODING__ class false or true
__FILE__ def for redo undef
BEGIN defined? if rescue unless
END do in retry until
alias else module return when
and elsif next self while
begin end nil super yield

行頭に含まれている場合のみ特別扱いするキーワード
に近いトークン
=begin =end __END__
空白と改行
? 空白はほとんどの場合は無視され、プログラム
  を見やすくするために使われる
? ただ、すべての空白が無視されるわけではない
  ことを、知っておこう

? 一行に複数の文を入れる場合を除いて、セミコ
  ロン(;)は書く必要が無い
? また、一行で文が完全じゃない場合、次の行も
  解析を続ける
########## 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 + #文が未完結
1
x2 = 1 #文が完結
+1
print("x1 = ");puts(x1);print("x2 = ");puts(x2)
2 構文構造
? Rubyの基本単位は式で、それを評価して値を生
  成する

? 簡単な式は、値を直接表現するもの

? trueやfalseなど、一部のキーワードも式

? 変数参照も式で、評価結果は変数の値になる
########## 8 構文構造について ##########
#リテラルは式だそうだ
#複雑な値が書けるリテラル
[1,2,3]     # 配列リテラル
{1=>"one",2=>"two"} # ハッシュリテラル
1..3       # 範囲リテラル

#式の見本
1     # 値が直接表現された式
x     # これも式
x = 1 # 代入式
x = x + 1 # 2つの演算を含む式
# 以下の文も、専門的にいえば式です
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"
# これらの文も、専門的にいえば式です
Rubyのブロック構造
? Rubyはブロックコードをもっている

? ブロックコードはキーワードや記号で区切られ
  ている
########## 9 ブロック構造について ##########
3.times { print(Kconv.tosjis“はい…”) } # 中かっこで囲んだ場合

print"n"           # 改行

3.times do         # do endで囲んだ場合
 print(Kconv.tosjis"はい…")
end

print"n" # 改行

1.upto(10) do |x|
 print x
end

# ブロックには、正式にブロックと呼ばれるものと、本体と呼ばれるも
  のがある
# 本体は、クラス定義、メソッド定義、whileループなどの内容を構成す
  る文のリストにすぎない
# Rubyでは、本体は中かっこで囲まれない
#図式的な例
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                      # モジュール本体の終わり
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'   #(ネットワークライブラリのロード)

#ここにプログラムコード

__END__
#(コードの終わりを示すマーク)
#これでプログラム終了 以降は実行されない

#プログラムデータ
# IO ストリームオブジェクトDATAを使って読み込むことができる
4 プログラムのエンコーディング
? Rubyの字句解析ルールは、ASCIIキャラクタ
  セットの文字を使って定義されている

? ASCII文字を完全に表現できるエンコーディン
  グであれば、インタープリタはどんなエンコー
  ディングを使っているファイルでも処理できる
日本語を使うとき
? ファイルがUTF-8を使って書かれている場合、
  コメント、文字列、正規表現には、任意の
  Unicode文字を使える

? ファイルが日本のSJIS、EUCエンコーディング
  を使っている場合には、漢字を含む文字列が使
  える
# 使用文字コードがUTF-8(Bomなし)なら、これで日本語が使える
require "kconv"
#putsは改行付きのprint
puts(Kconv.tosjis("日本語テスト"))
5 プログラムの実行
? Rubyはスクリプト言語

? 文は上から下へと順に実行されるが、制御構造
  で変更でき、いろんな条件に基づいて実行する
  ことができる

? 特別なmainメソッドはない
プログラムの終わり
? 以下の条件のどれかを満たせば、プログラムは
  終了する

? Rubyプログラムを終了させるような文を実行す
  る
? ファイルの末尾に到達する
? __END__トークンの書かれた行を読みだす
おつかれさまでした

More Related Content

搁耻产测讲座一回目