Microsoft PowerPoint - 11RubyIntro-No02.ppt [互換モード]

Similar documents
Microsoft PowerPoint - ruby_instruction.ppt

Java講座

Ruby演習テキスト1

Microsoft PowerPoint - Ruby n

メソッドのまとめ

Microsoft PowerPoint - prog03.ppt

プログラミングA

プログラミングA

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

テキスト処理第 2 回 田中哲産業技術総合研究所情報技術研究部門 akira/textprocess/

JEB Plugin 開発チュートリアル 第4回

Prog1_6th


プログラミング基礎I(再)

Ruby Ruby ruby Ruby G: Ruby>ruby Ks sample1.rb G: Ruby> irb (interactive Ruby) G: Ruby>irb -Ks irb(main):001:0> print( ) 44=>

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

JavaプログラミングⅠ

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

レコードとオブジェクト

テキスト処理第 12 回 ( ) 田中哲産業技術総合研究所情報技術研究部門 u.ac.jp /

NetworkApplication-09

プログラミング入門1

Prog2_12th

文字列操作と正規表現

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

untitled

Tips29: JavaScript で電話番号 ( 局番 ) の検証 / 編集 [ ] JavaScript JAVA 論理値 (True,False ) リテラル true, false が使えるリテラル

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

program7app.ppt

情報処理Ⅰ

Microsoft PowerPoint - Prog05.ppt

Microsoft PowerPoint - chap10_OOP.ppt

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

オブジェクト指向プログラミング・同演習 5月21日演習課題

JavaプログラミングⅠ

Microsoft PowerPoint - 計算機言語 第7回.ppt

メソッドのまとめ

デジタル表現論・第6回

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

K227 Java 2

Javaプログラムの実行手順

Microsoft PowerPoint - 13Kadai.pptx

Prog1_3rd

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

PowerPoint プレゼンテーション

プログラミング入門1

C#の基本2 ~プログラムの制御構造~

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Sort-of-List-Map(A)

PowerPoint プレゼンテーション

Functional Programming

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

Microsoft Word - wpphpmysql.doc

Microsoft Word 基_シラバス.doc

Microsoft PowerPoint - C_Programming(3).pptx

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

プログラミング入門1

PowerPoint プレゼンテーション

gengo1-11

プログラミング入門1

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

Programming D 1/15

JavaプログラミングⅠ

1

CプログラミングI

講習No.9

Prog1_10th

設問 println はそこで指定されている内容を出力して改行するものである. 一方,print は内容を出力して改行しないものである. 下記のプログラムそれぞれについて出力結果がどうなるか回答せよ. 下記のプログラム - を実行すると, fms という文字列が 回表示される. プログラム - vo

2

プログラミングD - Java

デジタル表現論・第4回

Microsoft Word - Training10_プリプロセッサ.docx

プログラミング基礎

初歩のC言語ターミナル_2014_May.pages

フローチャート自動生成ツール yflowgen の使い方 目次 1 はじめに 本ツールの機能 yflowgen.exe の使い方 yflowgen.exe の実行方法 制限事項 生成したファイル (gml ファイル形式 ) の開

JavaScriptプログラミング入門 2.JavaScriptの概要

基礎計算機演習 実習課題No6

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Microsoft Word - 03

計算機プログラミング

GEC-Java

PowerPoint プレゼンテーション

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

Taro-cshプログラミングの応用.jt

復習 プログラミング 1 ( 第 4 回 ) 関数の利用 2 ループ処理 (while 文 ) 1. Chapter の補足 2 1. 関数とローカル変数 2. Chapter 3.1 の補足 1. Iteration, looping ( 反復処理 ) 2. ループ処理の例 実行例 3

2

Scilab 勉強会 ( 第 3 回 ) 高橋一馬, 十文字俊裕, 柏倉守 平成 17 年 11 月 15 日 関数 ファイルはエディタを用いて作成する.Scilab にはエディタ SciPad が附属している.SciPad では なく他のエディタを利用してもよい. 作成した関数は Scilab に

デザイン戦略(コンピュータアニメーション) 2009年度春学期

PowerPoint プレゼンテーション

情報処理Ⅰ演習

Prog1_15th

Transcription:

Ruby 入門 東京電機大学櫻井彰人 Ruby とは? Ruby: 松本ゆきひろ氏による (1993) 純粋オブジェクト指向 スクリプト言語 Web プログラムで どんどんポピュラーに Ruby on Rails (http://www.rubyonrails.org/) なぜか きわめて Lisp like 松本行弘 (Matz) Introduction 実行環境 Windows/Unix/Linux/ etc. Interactive Ruby irb ファイルを実行するには myprogram.rb ruby myprogram.rb Hello world Hello world プログラムは 画面上 ( 標準出力 ) に ʺHello, world!ʺ 又は類似の文言を表示するだけの単純なプログラムである [Wikipedia] Ruby の Hello world プログラム puts "Hello World" ; は不要 画面上への印字 Installation 算数の初歩 1 + 2 1+2 # 3 正式な書き方 ( 何と完璧オブジェクト指向 ): 1.+(2) # 3 2 は引数 + はオブジェクト 1 のメソッド # のあとはコメント すべてがオブジェクト リテラルもオブジェクト -3180.abs # 3180 "3180 tutorial".length # 13 "CSC3180".index("5") # 8 true.& false # false Ruby オブジェクトの型を知るには class メソッドを使えばよい -3180.class # Fixnum 3.14159265.class # Float "3180 tutorial".class # String true.class # TrueClass 1

変数 Ruby では変数宣言の必要なし : 23; b = 456; c = 789; d = "Hello!" 並行代入が可能 : a, b, c, d = 123, 456, 789, "Hello!" 変数値の入れ替え : a, b = "abcd", 1234 a, b = b, a a # 1234 b # "abcd" 変数 変数はオブジェクトへの参照を保持する str1 = "DENDAI" str2 = str1 str1[5] = "8" str1 str2 # DENDA8 # DENDA8 ただし 例外がある : Fixnum, Float 変数はオブジェクト自体を保持する それらへの参照を保持しているわけではない 同じ値の二つの Fixnum は値を別々に保持する 配列 3 要素からなる配列を作る myarray = [ 1, 'hello', 3.14 ] 最初の要素を取り出す myarray[0] # 1 第二要素を変更する myarray[1]='world' myarray # [ 1, 'world', 3.14] 要素を追加する myarray <<"Oh" myarray # [ 1, 'world', 3.14, "Oh"] 配列 Ruby の配列は負のインデックス値も可 myarray = [ 1, 'hello', 3.14 ] myarray: 1 'hello' 3.14 index: 0 1 2 3 2 1 myarray[-1] # 3.14 myarray[-3] # 1 myarray[1000] # nil myarray[-999] # nil myarray[0..1] # [1, 'hello'] 変数と配列 複数個の変数に 配列を代入することができる ハッシュ キーと値の組を記憶するハッシュ表 a = [1,"e",3.14] b, c = a # b=1, c="e" b, *c = a # b=1, c=["e",3.14] b, c, d, e = a # b=1, c="e" # d=3.14 e=nil preference = { 'c' => 'classical', 'c++' => 'gothic', 'java' => 'baroque', 'prolog' => 'techno' } preference['prolog'] # 'techno' preference['prolog']='terrific' preference['prolog'] # 'terrific' 2

メソッド Ruby メソッドの簡単な一例 def sayhello(name) return "Hello, #{name}" sayhello("dendai") # "Hello, DENDAI" 文字列のなかに式を埋め込むことができる メソッドはクラスの中でもまた外でも定義できる クラスの外側でメソッドを定義すると それは トップレベルの Object インスタンスのメソッドとなる メソッド もし return 式がなければ メソッドは 最後に実行された式の値を返す Ruby では 必要でないときはいつでも return 式を省略することができる 例 : 再帰呼出しを用いた階乗 def factorial(n) if n==0 then 1 else n*factorial(n-1) def factorial(n) n==0? 1 : n*factorial(n-1) メソッド Ruby ではメソッドのオーバーローディングはない しかし 引数に default 値を与えることができる def sum(a, b, c=2, d=5) a + b + c + d sum(1,9) # 17 sum(1,2,3,4) # 10 Sum(1,2,-3) # 5 メソッド 質問 (true/false が答え ) に相当するメソッドには 慣例として 疑問符? を最後につける a = [] a.empty? # true 危険な メソッド すなわち 破壊的なメソッドには慣例として! を最後につける a = [1,2,3,4] a.reverse # [4,3,2,1] a # [1,2,3,4] a.reverse! # [4,3,2,1] a # [4,3,2,1] Array クラスには reverse と reverse! とがある 正規表現 Ruby は文字列のマッチング用に =~ 演算子を用意している if str =~ /Java Ruby/ puts "string containing Java or Ruby" str 中の最初の Python を Ruby で置換える str.sub!(/python/, 'Ruby') マッチング用パターン str 中の全部の Python を Ruby で置換 str.gsub!(/python/, 'Ruby') 勿論 危険でない sub と gsub もある true は? nil や false 以外は true Ruby では 0, ʺʺ, [] などはすべて true 前のスライドの例 if str =~ /Java Ruby/ puts "string contains Java or Ruby" この =~ 演算子はマッチングが起こった文字位置 ( マッチした場合 ) または nil ( マッチしなかった場合 ) を値とする 3

if 式 Ruby の if 式は他の言語と類似 if str =~ /Java/ puts "Java" elsif str =~ /Ruby/ puts "Ruby" else puts "What s that?" unless 式 Ruby には if 式の否定がある unless gpa > 0 puts "Absolute Zero" else puts "Positive" ʺC styleʺ の?: 式も用いることができる b = 2 max = a > b? a : b max # 2 更に if と unless if/unless 式は普通の式の最後に付加することができる a, b = 1, 2 a = b if a > b a # 1 b # 2 a = b unless a > b a # 2 b # 2 case 式 C/Java の switch と同じ ( ただし break はなし!) case university when " 電大 ": puts " 東京電機大学 " when / 東京 /: puts " 他の東京のつく大学 " when / 京都 /, / 慶應 /, / 工科 /, / 早稲田 / puts " 他の大学 " else puts "?" 改行 (new line) があるなら : は不要 while と until ループ 単純な while ループ構造 while a < 100 do # do は省略可 a *= 2 実は こんな書き方もできる a *= 2 while a < 100 until ループはその反対 a *= 2 until a >= 100 イテレータ Hello World を 3 回印字する for i in 1..3 do # do は省略可 puts "Hello World" こういう風にも書ける 3.times do # do は { } も可 puts "Hello World" これは次に等価 : 3.times {puts "Hello World"} 4

イテレータ 0 から 9 までの整数を印字 for i in 0..9 do または 0.upto(9) do i 等価 : 0.upto(9){ i } # do は省略可 イテレータ [0, 10] 中の偶数をすべて印字する 0.step(10,2){ i } 配列のイテレータ : for i in ['A', 'B', 'C', 'D', 'E'] do これに等価 : ['A', 'B', 'C', 'D', 'E'].each do i Block 構造 {..} または do.. でくくったコード { puts 'This is a block' } do puts 'this is another block' パラメータをブロック内に引渡す 0.upto(9){ i } Block 構造 例 : 0 9 内の整数を印字する 0.upto(9){ i } この 0 に関する upto メソッドは 例えば 1 を生成しブロック中の i に引渡す ブロック内のコードが実行される 終了すると 制御は upto メソッドに移り 次の値 (2) が生成され 以上が繰り返される i はブロック内に渡される これがブロック Block 付きのメソッド ブロックを 3 回呼出すメソッド def triplecall yield yield yield triplecall{ puts Hello World } この yield が実行されるとブロックが呼ばれる Block 付きのメソッド 0 から num までの整数を生成するメソッド さきほどの upto メソッドを手作り def fromzeroto(num) i = 0 while i <= num yield i i += 1 0 から 9 までの整数の印字 fromzeroto(9){ i } 5

関数型言語なみ 関数の関数 関数型言語なみ 関数の合成 cube = lambda { x x**3} # 関数定義 def double(x,p) # 関数 pを引数としてもらう関数 p.call(p.call(x)) puts double(2,cube) #=> 512 def compose(x,f,g) g.call(f.call(x)) cube = lambda { x x**3} down = lambda { x x-1} puts compose(4,cube,down) #=>63 数学で f(x) と f(a) とは何が違いますか? 注 : 関数 f(x) と関数 f(x) の x=a での値 f(a) 関数型言語なみ 関数を値として返す 関数型言語なみ さらにこんなことも def compose(f,g) lambda { x g.call(f.call(x))} cube = lambda { x x**3} down = lambda { x x-1} puts compose(cube,down).call(4) #=>63 def factorial(n) (1..n).inject{ x,y x*y} def factorial(n) eval( [*(1..n)].join("*") ) (defun compose (f g) (lambda (x) (funcall g (funcall f x)))) 6