約 2,414,299 件
https://w.atwiki.jp/startruby/pages/17.html
Rubyらしさ 文字列で遊ぼう! シンプルな文字列は を使う string = これは文字列です。 ん~~、普通! ちょっとフォーマットしたい時には""を使う バックスラッシュ記法でコントロール文字を埋め込みたい 変数の値を文字列にフォーマッティングしたい こんな用途に。 age = 18 string = "これは\n文字列です。\nボク永遠の#{age}歳!!" "#{}"の中は、かならず「式」として評価されるので、変数名がそのまま表記できる。 ちなみに、単なる計算式でもOK 主なバックスラッシュ記法 \t タブ \n 改行 \r キャリッジリターン \f 改ページ \b バックスペース \a ベル \e エスケープ \s 空白 \nnn 8 進数表記 \xnn 16 進数表記 \cx コントロール文字 (x は ASCII 文字) \C-x コントロール文字 (x は ASCII 文字) \x 文字 x そのもの 長文!ヒアドキュメント たとえば、HTMLのテンプレートな部分とか… たとえば、メールの長い典型文とか… そんな時はヒアドキュメント STRING = "EOS" これは 文字列です。 ボク永遠の#{age}歳!! EOS ちなみに、 EOS ~ EOS と書けば、 囲みの文字列と同等の扱いになり、 "EOS" ~ EOS と書けば、""囲みの文字列と同等の扱いになる。 ここから先の前提知識:ブロック ブロックとは? スコープの最小単位 do 実行文 end または { 実行文 } {~}の方がdo~endより少しだけ優先度が高い ブロック付きメソッド(いわゆるクロージャ) 使い方 def hoge(ary) ret = "result " ary.each do |i| ret += i end return ret end または def hoge(ary) ret = "result " ary.each { |i| ret += i } return ret end hogeメソッドからaryのeachを呼び出す eachメソッド内から、ブロックが呼ばれる|i|にeachからの引数(配列の内容)が渡る retに、渡された引数がどんどん連結される aryの内容をすべて連結した文字列を返す イテレータ 10回ループを普通にやると for i in [0..9] do p i end ブロック付きメソッドを使うと [0..9].each do |i| p i end …あんまり変わらないかな? でも、じつはこんなやり方も 10.times do |i| p i end for文より自然っぽくない? open/close制御 ファイルを開いて閉じるを普通にやると file = nil begin file = File.open("hoge.txt") 実行文 ensure file.close unless file == nil end ブロック付きメソッドを使うと File.open("hoge.txt") do |file| 実行文 end 何が便利かって、JavaやC#で起きがちな「クローズするためだけに延々とtry-finally記述が感染していく」がないこと! 例外ブロックも最適化できる! ブロック付きメソッドの作り方 def hoge 実行文 yield 実行文 end 引数があるときは def hoge 実行文 yield(item) 実行文 end 動性の高いRubyのリフレクション リフレクションという認識すらないくらい、「普通のこと」になっている。 これもまた、動的言語で「すべてがオブジェクト」の世界観が成せる技。 次のような動的拡張が可能になっている。 既存のクラスにメソッドを拡張する 既存のArrayクラスにhogeというメソッドを追加する場合、次のように書けば良い。 class Array def hoge end end これ、なんと組み込みクラスにも可能。 もちろん、既存のメソッドを書き換えることも可能! 既存のオブジェクトにメソッドを拡張する クラスにメソッドを拡張すると、なにかとメンドクサイ問題が出る場合がある。 そんな時は、対象となるオブジェクトにだけメソッドを拡張する。 array = [] def array.hoge end いちいち一個ずつメソッドを書き換えたり、メンドクサくない?って時にはMixIn モジュールとは「機能的に同じものをまとめて定義しておく」機能のこと。 クラスとは違い、継承ができないし、インスタンスの生成もできない。 「GUIでのコントローラをモジュールで表現」のような使い方をする。 「そのクラスの直接的な機能じゃないけれど、副次的に必要になるユーティリティ的機能」などをモジュール化しておくと、なにかと便利。 module KeyNameListItem def value @name = unless defined? @name @key = @name unless defined? @key if (@key == @name) return @name end return "#{@key} - #{@name}" end attr_reader key end というモジュールをつくっておいて、GUIで「このクラスをリスト表示したい!」というときにさらっと class Section include KeyNameListItem end というように、クラス再定義で組み込んでしまえる。 もちろん、オブジェクトにもMixIn section = Section.new section.extend KeyNameListItem これらの再定義をうまく使っていくと、JavaやC#にありがちなXxxUtilとか、XxxHelperとかいったクラスが必要ないという事に気づくはず! さあ!いま、Rubyという自由の羽を得た!! 飛び立とう!! めくるめくオブジェクトの世界へ!!
https://w.atwiki.jp/kmo2/
ここは、私がRubyのお勉強のために使うページ。 Rubyはとてもエレガントなスクリプト言語だと思うんだけど、どうにもよく分かってないんでここにメモをしていく。
https://w.atwiki.jp/startruby/pages/14.html
なぜRuby? 短期化する開発 3ヶ月単位の開発が増えてきた! 開発者は黙って徹夜休出を耐えるしかないのか? 開発現場を効率良く回す OSSフレームワークを効果的に採用する 自動化できる部分はできうる限り自動化する 自動化できる部分はできうる限り自動化する CI等大きなツールはOSSを利用 DBにリソースを放り込むとか細かい糊的ツールが必要 つくらにゃ! 自動化するためにはツールをつくらにゃ! ツールのキモは「素早く実装」「使いながらメンテ」 開発対象の言語で作る! c#にしてもJavaにしても重厚感はいなめない Excelのマクロ! nullとNothingの嵐に眩暈が WindowsScriptingHostを使う! OfficeはOLEで使えるけど、ライブラリ不足が否めない… LLは? 開発用ツールをLLで書くことの有用性 Perl、Python、Rubyとあるけれど… 糊として手軽である 開発効率がとってもいい 大抵のライブラリが揃っている ライブラリマネージャ(cpan、egg、gem)でネットから楽々インストール で、なんでRubyなの? 趣味です!!
https://w.atwiki.jp/startruby/pages/28.html
Start! Ruby Start!! Ruby View more presentations from mitim. 目次 なぜRuby? Smalltalkの思想を模倣した設計思想 基本的な構文 Rubyらしさ Rubyでもドキュメンテーション これだけは覚えておきたい!コマンド たくさんあるよ!ライブラリ 外部リンク
https://w.atwiki.jp/ankundora/pages/35.html
「for文」のページです for文は指定した処理を決められた数だけループさせるのに使います #include stdio.h int main() { for(int i = 0; i 5; i++){ printf("%d回目のループです\n",i); } return 0; } 実行結果 for文は中カッコ内の処理を決められた回数だけ実行します 書き方 for(初期化;条件式;次のループへの処理){ ループさせる処理 } 大抵は「初期化」のところで変数を宣言し、その変数に何度目のループかということを記録しておきます なので「次のループへの処理」のところで +1 をします また、「条件式」が真(0以外)の時に中カッコ内の処理が実行されます 流れを書くと、 ①for文へ到達 ↓ ②「初期化」 ↓ ③「条件式」(真だったら下へ、偽だったら⑥へ) ↓ ④処理の実行 ↓ ⑤「次のループへの処理」(③に戻る) ⑥for文から脱出 となっています 大抵の書き方 for(int i = 0;i ループしたい回数;i++); サンプルコードでは変数「i」をprintf関数で使っています 「i」はfor文の中で宣言されているとしても、ひとつの変数にかわりはありません なのでfor文の中であれば、その変数を使うことが出来ます
https://w.atwiki.jp/cschola/pages/60.html
for文 for文 は while文 と同じようにループを作ります。 for文の形は次のようになります for( 変数の宣言と初期化; ループ条件; ループカウント) while と for の使い分けは、「ループの回数がわかっているときは for文」 「ループの回数がわからないときは while文」 です。 使いながら覚えましょう。 for(int i = 0; i 10; i++){ printf("%d\n",i); // iがいくつなのか表示 } while文 に比べてとてもコンパクトにまとまっています。 for と書いた次の ( ) の中にいろいろと入っています。 まず int i = 0; の部分ですが、ここはループに使う変数の初期化です。 i 10; の部分がループの条件です。 今回は i が10より少ないあいだはループします。 i++ の部分は毎回行われるループ用変数の変化です。 なお、ここで作られた変数はforループの中でしか使えません。 for(int i = 0; i 10; i++){ printf("%d\n",i); // iがいくつなのか表示 } printf("%d\n",i); // ループの外でiを表示【error!】 ループの外でも使う場合は下のようにループに入る前に宣言しておきましょう。 int i = 0; for(i = 0; i 10; i++){ printf("%d\n",i); // iがいくつなのか表示(1~9を表示) } printf("%d\n",i); // ループの外でiを表示【正常に動作】(10を表示) インクリメント i++ のほかに 「++i」 「i--」 「--i」 などがあり、それぞれに違いがあります。 次のプログラムの例はあまりいい書き方ではありません。よいこはマネしないでね。 例1 for(int i = 0; i = 10;) { printf("%d\n",i++); } 例2 for(int i = 0; i = 10;){ printf("%d\n",++i); } 例3 for(int i = 10; i = 0;){ printf("%d\n",i--); } 例4 for(int i = 10; i = 0;){ printf("%d\n",--i); } 実行すると違いが分かると思います。 ++ や -- が前についている場合はその式の最初に計算され、後ろについている場合は最後に計算されます。 ++ をインクリメント -- をデクリメントなどと呼びます。 forの2重ループ for文 も2重ループ、3重ループにすることができます。 for(int i = 0; i 10; i++){ // ループ1 for(int j = 0; j 10; j++){ // ループ2 printf("%d",j); // ループ2のループ数を表示 } } break for文でも break を使えます int num = 0; printf("0以外を入力すると終了です。\n"); for(int i = 0; true; i++){ printf("%d回ループしました。\n数値を入力してください。\n",i); scanf_s("%d", num); // 数値入力 // 0が入力されたら if(num != 0){ break; // ループを抜ける } } continue continue もfor文で使えます int num = 0; // 入力された数値をいれる printf("1から10の数値を入力してください。\n"); scanf_s("%d", num); for(int i = 1; i = 10; i++){ // もしループ数と入力された数値が同じなら if(i == num){ continue; // 以降の処理を飛ばす } printf("%d回ループしました。\n",i); } 練習問題 for文を使って1から5までの合計を計算して表示するプログラムを作りなさい。
https://w.atwiki.jp/o230483/pages/17.html
総本山 Rubyist Magazine 日本Rubyの会 リファレンスマニュアル Ruby 実習マニュアル 拡張ライブラリ作成チュートリアル
https://w.atwiki.jp/seasartaro/pages/49.html
以下のようにテーブルを作成します。 t = {"value1", "value2", "value3", "value4", "value5"} for文は以下の通りです。 for i = 1, 4, 1 do -- 1から4まで+1しながらループする if i 3 then -- iが3を超えた場合終了。 break end print(t[i]) end 出力は以下です。i == 4のときに文字を出力する前にbreakでfor文を抜けるようにしました。 value1 value2 value3
https://w.atwiki.jp/crsavrkouza/pages/26.html
6.for文 for文はwhile文と同じく繰り返しの構文ですが、少し使い方が変わります。 前回の1000までの数字を表示させるプログラムを書き換えます。 #include stdio.h int main(void){ int i; for(i = 0; i 1000; i++){ printf("%d\n", i); } return 0; } ここで新しく出てきた「i++」はインクリメントと言って、 i = i + 1; と同じ意味を持ちます。プログラミングではよく1を足すという操作を使うので特別な構文が作られているのです。 それでは構文を見てみましょう。 for (初期化式; 条件式; 更新式){ 文; } このような形になります。この構文でのそれぞれの役割は以下のようになります。 初期化式 繰り返しが始まる前に一度だけ実行されます。 条件式 { }内の処理が実行される前に繰り返しを続けるかの判定を行います。条件式が真ならば繰り返しの処理を行い、条件が偽ならば繰り返しの処理を終了します。 更新式 { }内の処理が実行されたあと、次に条件式を計算される前に実行されます。 for文の処理の流れを図で表すと次のようになります。
https://w.atwiki.jp/shinobu2/pages/47.html
まず最初のfor文について確認します。for文は指定した回数だけ処理を繰り返す時に使われます。書式は次の通りです。 for (初期化式; 条件式; 変化式){ 実行する文1; 実行する文2; ... } for文では条件式を評価しtrueだった場合には「{」から「}」のブロック内に記述された文を実行します。条件式は関係演算子及び論理演算子などを使って記述します。(関係演算子及び論理演算子を参照して下さい)。 そしてブロック内の処理が一通り終わると改めて条件式を評価します。そしてまたtrueだった場合にはブロック内の文の実行し、falseだった場合にはfor文を終了します。 なお繰り返しで実行される文が一つだった場合には「{」と「}」を省略して次のように記述することもできます。 for (初期化式; 条件式; 変化式) 実行する文; ではまず条件式だけを使ってfor文を記述してみます。次の例を見て下さい。 int sum = 0; int count = 0; for (; count 2;){ sum += 2; count++; } System.out.println(sum); この例では条件式「count 2」がtrueとなる間繰り返し処理を実行します。繰り返し処理を1度実行するために条件を変化させなければ無限に繰り返しを行ってしまいますので今回の例では繰り返しの中で実行される文の一つとして変数「count」の値を1ずつ増加させています。 この例では次のように文が実行されていきます。 1)sum = 0; 2)count = 0; 3)条件式を評価。countは2よりも小さいので繰り返しを実行 4)sum += 2; 5)count++; 6)条件式を評価。countは2よりも小さいので繰り返しを実行 7)sum += 2; 8)count++; 9)条件式を評価。countは2よりも小さくないので繰り返しを終了 10)System.out.println(sum); このようにfor文ではまず最初に条件式が評価されます。もしも条件式がいきなりfalseとなった場合には繰り返し処理は実行されません。条件式がtrueだった場合にはfor文の「{」から「}」までのブロック内の文を順に実行していきます。 ブロック内の最後の文を実行したら1回目の繰り返しが終了です。そしてfor文の最初に戻り改めて条件式を評価します。trueなら再度ブロック内の文を実行し、falseだった場合にはfor文の次の文へ処理が移ります。 for文はこのように条件式の評価とブロック内の処理の実行を繰り返す為のものです。 初期化式と変化式 for文では条件式の他に初期化式と変化式を記述することができます。 初期化式に記述した式はfor文で最初に条件式が評価される前に一度だけ実行されます。使い道としてはfor文の条件式で使用される変数の宣言と初期化に利用されることが多いです。for文の条件式で使用する回数をカウントするための変数について、最初の例では変数の宣言と初期化をfor文の外でで行っていましたが初期化式の箇所で記述することができます。 変化式は繰り返し処理が一度終わるたびに実行される式を記述します。主に条件式で使われている変数の値を変化させるための式を記述します。例えば条件式で使用している変数の値を1つ増加させるような式を記述します。 では先ほどの例を書き直してみます。 int sum = 0; for (int count = 0; count 2; count++){ sum += 2; } System.out.println(sum); 先ほどと比べて、for文の条件式で使用する変数はfor文で宣言と初期化が行われており、また繰り返しが行われるたびに何をどう変化させるのかが変化式の箇所に書かれていて明確になっています。 では基本的な使い方をご紹介しておきます。n回繰り返し処理を行う場合は次のように記述します。 for (int i = 0; i n; i++){ /* 実行する文 */ } 例えば3回繰り返す時は「n」のところに3と記述し、10回繰り返し場合は「n」のところに10と記述します。10回の場合で言えば変数「i」の値は0から9の間は繰り返しを実行し、10になった時には条件式がfalseとなりfor文が終了します。結果的に繰り返しは10回行われます。これは次のように記述しても同じです。 for (int i = 1; i = n; i++){ /* 実行する文 */ } この場合は変数「i」が1から10の間は繰り返しを実行し、11になった時に終了します。この場合でも繰り返しは10回実行されます。変数の値を条件式での評価だけではなく繰り返し処理の中で使用したい場合などには回数だけではなく、数値を何から何まで変化させて回数を計算するのかも考えなくてはなりません。 わからないところがあったら以下に書き込んでください。 test -- (test) 2010-12-10 22 01 03 テスト -- (test) 2010-12-10 23 00 34 hosei -- (HOSEI) 2011-01-31 14 10 34 test -- (名無しさん) 2011-01-31 14 10 53 名前 コメント すべてのコメントを見る