SlideShare una empresa de Scribd logo
1 de 14
CodeFlipper




 プログラミング言語 Ruby

        2章
Ruby プログラムの構造と実行


                  2010/10/10
                  mong_lee
CodeFlipper




    コメントと埋め込みドキュメント
●   #(シャープ)の後は、コメント
●   複数行またがるコメントは、コメントの前後行に単独
    の#を挿入するのが慣例
●   「=begin~=end」で囲むとコメントと認識される

    #コメントですよ
    #コメントですよ        =begin
                    =begin
                     'VBのHello Worldです
                     'VBのHello Worldです
    #
    #                MessageBox.Show(“Hello
                     MessageBox.Show(“Hello
    #今日はパスタ屋にいきます
    #今日はパスタ屋にいきます   World!”)
                    World!”)
    #何をたのもうかしら?
    #何をたのもうかしら?     =end
                    =end
    #
    #
        コメント            埋め込みドキュメント


                                                       2
CodeFlipper




        ドキュメント用コメント
●
    モジュール定義の前に、特別な形式のコメントを入れ
    ることによってAPIドキュメントを組み込める
●   rdocツールを使用して、HTMLに整形したりriが表示で
    きる形式にできる

    #
    #                    # リスト項目
                         # リスト項目
    #rdoc用コメント
    #rdoc用コメント           # *あいうえお
                         # *あいうえお
    #
    #                    # *かきくけこ
                         # *かきくけこ
    # = 見出し
    # = 見出し              #
                         #
    #
    #                    # などなど
                         # などなど
    # ==小見出し
    # ==小見出し             #
                         #
                 ドキュメント用コメントの一例



                                             3
CodeFlipper




                      リテラル
●   数値、文字列、正規表現の3種類(3章でやるよ)
●   記号は演算子などで使われる(4章でやるよ)


    11         #整数リテラル
               #整数リテラル      **
                             **       #指数
                                      #指数
    1.0
     1.0       #浮動小数点リテラル
               #浮動小数点リテラル   ==        #代入
                                      #代入
    'one'
     'one'     #文字列リテラル
               #文字列リテラル     ===
                             ===    #パターンマッチ
                                    #パターンマッチ
    “two”
     “two”     #文字列リテラル
               #文字列リテラル     &&        #ビット演算AND
                                      #ビット演算AND
    /three/
     /three/   #正規表現リテラル
               #正規表現リテラル    ||        #ビット演算OR
                                      #ビット演算OR
               リテラル                埋め込みドキュメント




                                                           4
CodeFlipper




                    識別子(1)
●   英数字と_(アンダースコア)から構成される
●   先頭数字は×、アンダースコアは○
●   先頭大文字は定数扱い(値変更で警告)
●   複数の語からなる識別子はアンダースコアで区切る
●   クラスやモジュールの名前の先頭は大文字
●   Ruby内で定義されたASCII文字に含まれない文字は識
    別子として使用可能
      idx
       idx          temp_array
                     temp_array   TeisuDesuyo
                                  TeisuDesuyo
      mong_lee
       mong_lee     _hogehoge
                     _hogehoge    H13i32maru
                                  H13i32maru
      Class Hoge
       Class Hoge   nihongoおけ
                     nihongoおけ
                     識別子の一例

                                                         5
CodeFlipper




                          識別子(2)
●
    先頭や末尾が記号の識別子は特別な意味がある


    $global_variable
     $global_variable     #グローバル変数
                          #グローバル変数
    @instance_variable
     @instance_variable   #インスタンス変数
                          #インスタンス変数
    @@class_variable
     @@class_variable     #クラス変数
                          #クラス変数
    empty?
     empty?               #論理値を返すメソッド
                          #論理値を返すメソッド
    sort!
     sort!                #破壊的メソッド
                          #破壊的メソッド
    timeout=
     timeout=             #代入演算子により起動されるメソッド
                          #代入演算子により起動されるメソッド
                      先頭や末尾に記号の識別子




                                                        6
CodeFlipper




                       キーワード
●
    キーワード≒予約語
●   $、@、@@などをつけると使用できるが、分かりづ
    らくなるため、使わないほうが無難
●   Kernel、Module、Class、Objectクラスのメソッドも
    予約語として扱う方が無難

     __LINE__
      __LINE__    case
                   case      not
                              not     then
                                       then
     class
      class       true
                   true      false
                              false   __FILE__
                                       __FILE__
     private
      private     require
                   require   load
                              load    loop
                                       loop
     gsub!
      gsub!       sleep
                   sleep     eval
                              eval    exit
                                       exit
     freeze
      freeze      method
                   method    nil?
                              nil?    to_s
                                       to_s
                 予約語として扱うべきキーワードの一例


                                                           7
CodeFlipper




                       空白
●
    スペース、タブ、改行はトークンを区切るために使用
●
    空白の挿入や、削除によりプログラムの意味が変わっ
    たしまうことがある
●   行末に(バックスラッシュ)で文末と解釈しない

    total = x +
     total = x +        total = x
                         total = x
      y
      y                   +y
                          +y

       2行をひとつの文として解釈           各行をそれぞれ解釈




                                                    8
CodeFlipper




     スペースとメソッド呼び出し
●
    メソッド呼び出しを囲む()は、一定の条件が満たさ
    れているときに省略できる
●   あいまいな記述は-wオプションで警告を出すようにで
    きる
       f(3+2)+1
        f(3+2)+1    #(3+2)がfに渡される
                    #(3+2)がfに渡される
       ff (3+2)+1
          (3+2)+1   #(3+2)+1がfに渡される
                    #(3+2)+1がfに渡される
             スペースによるメソッド呼び出しの違い




                                               9
CodeFlipper




                         構文構造
●   Rubyの構文の基本単位は式
●   Rubyインタープリタは式を評価して値を生成する
●   式をRubyのキーワードで結合すると、文が作られる


       while x < 10 do
       while x < 10 do   #この式がtrueである間は
                         #この式がtrueである間は
        print x
        print x          #この式を実行せよ
                         #この式を実行せよ
        x=x+1
        x=x+1            #この式を実行せよ
                         #この式を実行せよ
       end
       end               #繰り返しの末尾
                         #繰り返しの末尾
                         while文




                                                  10
CodeFlipper




              Rubyのブロック構造
●   Rubyの文のほとんどはネストされたコードブロック
    を持っている
●   区切りからスペース2個分インデントする習慣
●   二種類のブロックを持っている(正式なブロックと本
    体)

    1.upto(10) do |x|
    1.upto(10) do |x|   module mogemoge
                        module mogemoge
     print x
     print x              ・・・
                          ・・・
    end
    end                 end
                        end

           正式なブロック             本体(body)




                                                   11
CodeFlipper




               ファイル構造
●   “shebang” コメント(#!/usr/bin/ruby -wなど)は一行
    目に記述する
●   “coding” コメント(#coding: utf-8など)は一行目か二
    行目に記述する
●   __END__トークンのみ含む行がある場合、それ以降
    ファイルを処理しない
●   requireを用いてライブラリを呼び出すことができる




                                                12
CodeFlipper




    プログラムのエンコーディング
●   Rubyの字句解析ルールはASCIIキャラクタセットの文
    字を使って定義されている
●   ASCII文字を完全に表現できるエンコーディングであ
    れば、どんなファイルでも処理できる
●   特定のASCII文字を除けば、任意の文字を含んでよい

           # coding: SHIFT_JIS
           # coding: SHIFT_JIS
           p “はろー、わーるど”
           p “はろー、わーるど”

                 encodingの指定




                                         13
CodeFlipper




          プログラムの実行
●
    基本的に先頭から末尾に順次実行される
●   プログラムを終了させるような文(exit!)、ファイル
    の末尾、__END__トークンが書かれた行まで実行
●   mainメソッドは存在しない




                                     14

Más contenido relacionado

La actualidad más candente

エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング道化師 堂華
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門Shohei Arai
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJavableis tift
 
Ruby講座第二回
Ruby講座第二回Ruby講座第二回
Ruby講座第二回mitsunaga
 
魂のコーディング
魂のコーディング魂のコーディング
魂のコーディングDaisuke Tasaki
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...Kaz Aiso
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„和弘 井之上
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„Kaz Aiso
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScriptbleis tift
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたMitsuru Kariya
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Takashi Hoshino
 
Numeric クラスについて
Numeric クラスについて Numeric クラスについて
Numeric クラスについて Tomoya Kawanishi
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macrodigitalghost
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方Shigenori Sagawa
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 

La actualidad más candente (19)

エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
Ruby講座第二回
Ruby講座第二回Ruby講座第二回
Ruby講座第二回
 
魂のコーディング
魂のコーディング魂のコーディング
魂のコーディング
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
 
C++14言語編
C++14言語編C++14言語編
C++14言語編
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
 
Java scriptの基礎
Java scriptの基礎Java scriptの基礎
Java scriptの基礎
 
Ruby4章
Ruby4章Ruby4章
Ruby4章
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
 
Numeric クラスについて
Numeric クラスについて Numeric クラスについて
Numeric クラスについて
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macro
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 

Similar a プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行

第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 
ソフトウェア工学2023 12 コードフォーマット
ソフトウェア工学2023 12 コードフォーマットソフトウェア工学2023 12 コードフォーマット
ソフトウェア工学2023 12 コードフォーマットToru Tamaki
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライドkoturn 0;
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)bleis tift
 
Ruby紹介(pdf)
Ruby紹介(pdf)Ruby紹介(pdf)
Ruby紹介(pdf)Gohryuh
 
コードの複雑さを測ろう
コードの複雑さを測ろうコードの複雑さを測ろう
コードの複雑さを測ろうShinya_131
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005gotohayato
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそDavid Buck
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)Masahiro Hayashi
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』Nagi Teramo
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーmganeko
 
Java オブジェクトの内部構造
Java オブジェクトの内部構造Java オブジェクトの内部構造
Java オブジェクトの内部構造Taku Miyakawa
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうEsehara Shigeo
 

Similar a プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行 (20)

第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
ソフトウェア工学2023 12 コードフォーマット
ソフトウェア工学2023 12 コードフォーマットソフトウェア工学2023 12 コードフォーマット
ソフトウェア工学2023 12 コードフォーマット
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
 
Ruby紹介(pdf)
Ruby紹介(pdf)Ruby紹介(pdf)
Ruby紹介(pdf)
 
コードの複雑さを測ろう
コードの複雑さを測ろうコードの複雑さを測ろう
コードの複雑さを測ろう
 
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそ
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
Java オブジェクトの内部構造
Java オブジェクトの内部構造Java オブジェクトの内部構造
Java オブジェクトの内部構造
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
 

プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行

  • 1. CodeFlipper プログラミング言語 Ruby 2章 Ruby プログラムの構造と実行 2010/10/10 mong_lee
  • 2. CodeFlipper コメントと埋め込みドキュメント ● #(シャープ)の後は、コメント ● 複数行またがるコメントは、コメントの前後行に単独 の#を挿入するのが慣例 ● 「=begin~=end」で囲むとコメントと認識される #コメントですよ #コメントですよ =begin =begin  'VBのHello Worldです  'VBのHello Worldです # #  MessageBox.Show(“Hello  MessageBox.Show(“Hello #今日はパスタ屋にいきます #今日はパスタ屋にいきます World!”) World!”) #何をたのもうかしら? #何をたのもうかしら? =end =end # # コメント 埋め込みドキュメント 2
  • 3. CodeFlipper ドキュメント用コメント ● モジュール定義の前に、特別な形式のコメントを入れ ることによってAPIドキュメントを組み込める ● rdocツールを使用して、HTMLに整形したりriが表示で きる形式にできる # # # リスト項目 # リスト項目 #rdoc用コメント #rdoc用コメント # *あいうえお # *あいうえお # # # *かきくけこ # *かきくけこ # = 見出し # = 見出し # # # # # などなど # などなど # ==小見出し # ==小見出し # # ドキュメント用コメントの一例 3
  • 4. CodeFlipper リテラル ● 数値、文字列、正規表現の3種類(3章でやるよ) ● 記号は演算子などで使われる(4章でやるよ) 11 #整数リテラル #整数リテラル ** ** #指数 #指数 1.0 1.0 #浮動小数点リテラル #浮動小数点リテラル == #代入 #代入 'one' 'one' #文字列リテラル #文字列リテラル === === #パターンマッチ #パターンマッチ “two” “two” #文字列リテラル #文字列リテラル && #ビット演算AND #ビット演算AND /three/ /three/ #正規表現リテラル #正規表現リテラル || #ビット演算OR #ビット演算OR リテラル 埋め込みドキュメント 4
  • 5. CodeFlipper 識別子(1) ● 英数字と_(アンダースコア)から構成される ● 先頭数字は×、アンダースコアは○ ● 先頭大文字は定数扱い(値変更で警告) ● 複数の語からなる識別子はアンダースコアで区切る ● クラスやモジュールの名前の先頭は大文字 ● Ruby内で定義されたASCII文字に含まれない文字は識 別子として使用可能 idx idx temp_array temp_array TeisuDesuyo TeisuDesuyo mong_lee mong_lee _hogehoge _hogehoge H13i32maru H13i32maru Class Hoge Class Hoge nihongoおけ nihongoおけ 識別子の一例 5
  • 6. CodeFlipper 識別子(2) ● 先頭や末尾が記号の識別子は特別な意味がある $global_variable $global_variable #グローバル変数 #グローバル変数 @instance_variable @instance_variable #インスタンス変数 #インスタンス変数 @@class_variable @@class_variable #クラス変数 #クラス変数 empty? empty? #論理値を返すメソッド #論理値を返すメソッド sort! sort! #破壊的メソッド #破壊的メソッド timeout= timeout= #代入演算子により起動されるメソッド #代入演算子により起動されるメソッド 先頭や末尾に記号の識別子 6
  • 7. CodeFlipper キーワード ● キーワード≒予約語 ● $、@、@@などをつけると使用できるが、分かりづ らくなるため、使わないほうが無難 ● Kernel、Module、Class、Objectクラスのメソッドも 予約語として扱う方が無難 __LINE__ __LINE__ case case not not then then class class true true false false __FILE__ __FILE__ private private require require load load loop loop gsub! gsub! sleep sleep eval eval exit exit freeze freeze method method nil? nil? to_s to_s 予約語として扱うべきキーワードの一例 7
  • 8. CodeFlipper 空白 ● スペース、タブ、改行はトークンを区切るために使用 ● 空白の挿入や、削除によりプログラムの意味が変わっ たしまうことがある ● 行末に(バックスラッシュ)で文末と解釈しない total = x + total = x + total = x total = x y y +y +y 2行をひとつの文として解釈 各行をそれぞれ解釈 8
  • 9. CodeFlipper スペースとメソッド呼び出し ● メソッド呼び出しを囲む()は、一定の条件が満たさ れているときに省略できる ● あいまいな記述は-wオプションで警告を出すようにで きる f(3+2)+1 f(3+2)+1 #(3+2)がfに渡される #(3+2)がfに渡される ff (3+2)+1 (3+2)+1 #(3+2)+1がfに渡される #(3+2)+1がfに渡される スペースによるメソッド呼び出しの違い 9
  • 10. CodeFlipper 構文構造 ● Rubyの構文の基本単位は式 ● Rubyインタープリタは式を評価して値を生成する ● 式をRubyのキーワードで結合すると、文が作られる while x < 10 do while x < 10 do #この式がtrueである間は #この式がtrueである間は print x print x #この式を実行せよ #この式を実行せよ x=x+1 x=x+1 #この式を実行せよ #この式を実行せよ end end #繰り返しの末尾 #繰り返しの末尾 while文 10
  • 11. CodeFlipper Rubyのブロック構造 ● Rubyの文のほとんどはネストされたコードブロック を持っている ● 区切りからスペース2個分インデントする習慣 ● 二種類のブロックを持っている(正式なブロックと本 体) 1.upto(10) do |x| 1.upto(10) do |x| module mogemoge module mogemoge print x print x ・・・ ・・・ end end end end 正式なブロック 本体(body) 11
  • 12. CodeFlipper ファイル構造 ● “shebang” コメント(#!/usr/bin/ruby -wなど)は一行 目に記述する ● “coding” コメント(#coding: utf-8など)は一行目か二 行目に記述する ● __END__トークンのみ含む行がある場合、それ以降 ファイルを処理しない ● requireを用いてライブラリを呼び出すことができる 12
  • 13. CodeFlipper プログラムのエンコーディング ● Rubyの字句解析ルールはASCIIキャラクタセットの文 字を使って定義されている ● ASCII文字を完全に表現できるエンコーディングであ れば、どんなファイルでも処理できる ● 特定のASCII文字を除けば、任意の文字を含んでよい # coding: SHIFT_JIS # coding: SHIFT_JIS p “はろー、わーるど” p “はろー、わーるど” encodingの指定 13
  • 14. CodeFlipper プログラムの実行 ● 基本的に先頭から末尾に順次実行される ● プログラムを終了させるような文(exit!)、ファイル の末尾、__END__トークンが書かれた行まで実行 ● mainメソッドは存在しない 14