2014-05-01から1ヶ月間の記事一覧
概要 Kernel#print(*arg) -> nil 詳細 引数を順に標準出力 $stdout に出力します。引数が与えられない時には変数 「$_」 の値を出力します。 文字列以外が与えられた場合は to_s して出力する。 変数 「$,」 に値がセットされている場合は、各引数の間にその…
概要 追加要件 Integer#reverse_each_digit 追加 詳細 追加要件 Integer#reverse_each_digit 仕様 ・整数の各桁に対してイテレータを逆順で提供します。 ※より詳細についてはGitHubのREADMEおよびテストケース参照 GitHub https://github.com/tbpgr/tbpgr_ut…
概要 書籍 Build Awesome Command-Line Applications in Ruby2に関するまとめ 一覧 章 詳細 URL/内容 Introduction -- http://d.hatena.ne.jp/tbpg/20140521/1400681014 Have a Clear Concise Purpose 概要 http://d.hatena.ne.jp/tbpg/20140522/1400762298 …
概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Introduction 詳細 開発環境の変遷 〜 1990年代 JavaがメジャーになるとともにGUI、IDEなどが普及。 旧来のCLIのツールは時代遅れのものと認識されがちになってきた。Java + GUIの環境は非常…
概要 Convention over Configration(設定より規約。CoC) 〜 プロダクトコード・テストコード・ドキュメントの一括生成・一括更新をCoCで行ってみる 詳細 Convention over Configration(設定より規約。CoC)はRuby on Railsで利用されているパターンです。規約…
概要 カスタムオブジェクトを作成する 詳細 Rubyのメタプログラミング機能を利用して、動的にクラス内の定義を生成します。 サンプル仕様 lambdaのリストを与えると、リストの中からランダムにlambdaを実装したメソッドを定義するクラスを作成します。動的に…
概要 DSL(Domain Specific Language) 〜 N進数対応表の出力DSLを作ってみる 詳細 DSL(Domain Specific Language)=ドメイン特化言語。 Ruby詳しくなくても、対象ドメインに詳しければ動作させることができるような ミニ言語=ドメイン特化言語を作成する。代…
概要 Kernel#p(*arg) -> object | Array 詳細 引数を人間に読みやすい形に整形して改行と順番に標準出力 $stdout に出力します。 主にデバッグに使用します。 各引数に対してinspectして出力、改行を繰り返した形式で出力される。 Stringと他の型の区別がつ…
概要 追加要件 Integer#each_digit_with_index 追加 詳細 追加要件 Integer#each_digit_with_index 仕様 ・整数の各桁に対してインデックス付きのイテレータを提供します。 ※より詳細についてはGitHubのREADMEおよびテストケース参照 GitHub https://github.…
概要 『Ruby警官から警告を受けろ』環境構築について ホストOSにVagrant+VirtualBox環境が整っている場合 下記のREADMEの手順で環境環境構築できます。 https://github.com/tbpgr/codeiq_vagrant_for_rubocop ホストOSにVagrant+VirtualBox環境がないが、…
概要 『Ruby警官から警告を受けろ』問題 QA 詳細 『Ruby警官から警告を受けろ』問題 QAです。 主に環境に関する内容になります。 Q1 Q Windowsでもできますか?A 概ねできます・・・・が、OS依存の警告もあるため採点時に少し警告数がずれる可能性があります…
概要 Builder Pattern 〜 プロジェクトチームを組み立てる 詳細 Builder Patternは、一定の設定手順のあるオブジェクトを 一か所で管理して組み立てるためのパターンです。これにより、オブジェクトの利用各所で何度も複雑な手順を呼び出す手間や、 呼出し手…
概要 Factory Pattern 〜 CodeIQの参加者を生成する 詳細 Factory Patternは、インスタンス生成をサブクラスに任せるパターン。 Creatorにインスタンス生成の手順を受け持ち、 Creatorを継承したサブクラスがインスタンスの生成を受け持つ。実装内容はTempla…
概要 Singleton Pattern 詳細 Singleton Patternは、1つのインスタンスを保証するパターンです。 サンプル仕様 システムで唯一のアクセスカウンタを作成します。 サンプル require 'singleton' class AccessCounter include Singleton attr_reader :counter …
概要 Kernel#loop { ... } -> object 詳細 永遠にブロックの評価を繰り返す。 中断する場合はbreakを使用する。 breakは戻り値を設定可能。 サンプルコード cnt = 0 ret = loop do break ("hoge") if cnt > 5 cnt += 1 end puts ret puts cnt 出力 hoge 6 参…
概要 追加要件 Integer#each_digit 追加 詳細 追加要件 Integer#each_digit 仕様 ・整数の各桁をイテレーションします。 ※より詳細についてはGitHubのREADMEおよびテストケース参照 GitHub https://github.com/tbpgr/tbpgr_utils Rubygems http://rubygems.o…
概要 Decorator Pattern 〜 CodeIQの解答コメントをデコレーションする 詳細 Decorator Patternは、既存のオブジェクトに対して新たな機能をレイヤ状に追加していけるようにするパターンです。 これにより、一つのクラスやメソッドに責務の異なる様々な機能…
概要 Proxy Pattern 〜 CodeIQの簡単な問題は後輩Proxyに解かせる 詳細 Proxy Patternは、生成コストが大きかったり・何らかの前処理や後処理をする領域がほしかったりする場合に 本物のオブジェクトのふりをするオブジェクトを作成するパターンです。これに…
概要 Adapter Pattern 詳細 Adapter Patternは、既存のインターフェースと新たなインターフェースの橋渡しを行います。 サンプル仕様 あるサービスを提供するシステムがあります。 複数の利用者がサービスを呼び出します。1次開発ではサービスはargs引数のみ…
概要 Command Pattern 詳細 Command Patternは、命令を実行するためのパターンです。 命令をCommandとしてクラスにしておくことで、実行方法と命令を分離することができます。 これにより ・命令の履歴を保存する ・Undo機能を持つ ・命令をためてから任意の…
概要 Iterator Pattern 詳細 Iterator Patternは、内部オブジェクトの保持形式に依存せずに外部に連続して走査するための インターフェースを提供するパターンです。 サンプル1仕様 Stringクラスの各単語へのIteratorを実装する。 ここでは、半角スペースで…
概要 Kernel#local_variables -> [Symbol] 詳細 現在のスコープにあるローカル変数名の一覧を配列にして返します。 サンプルコード require 'pp' require 'test_toolbox' def hoge(args_a, args_b) c = 'hoge c' d = 'hoge d' pp local_variables end a = 'a…
概要 追加要件 Object#grep_protected_instance_method,grep_private_instance_method 追加 詳細 追加要件 Object#grep_protected_instance_method,grep_private_instance_method 仕様 ・Object#grep_protected_instance_method.grep, grep_private_instance…
概要 load(file, priv = false) -> true 詳細 Ruby プログラム file をロードして実行します。再ロード可能です。 require と load の違い require は同じファイルは一度だけしかロードしない load は無条件にロードrequire はライブラリのロード load は 設…
概要 『Ruby警官から警告を受けろ』問題 Lv2 詳細 『Ruby警官から警告を受けろ』問題 Lv2 の出題を開始しました。 https://codeiq.jp/ace/tbpgr_badge/q884 どんな問題? Rubyの静的解析ツールRuboCopの警告をわざと発生させる問題です。 ゲーム感覚で警告を…
概要 『Ruby警官から警告を受けろ』問題 Lv1 詳細 『Ruby警官から警告を受けろ』問題 Lv1 の出題を開始しました。 https://codeiq.jp/ace/tbpgr_badge/q883 どんな問題? Rubyの静的解析ツールRuboCopの警告をわざと発生させる問題です。 ゲーム感覚で警告を…
概要 追加要件 Object#grep_method 追加 詳細 追加要件 Object#grep_method 仕様 ・Object#methods.grepと同等です。 ※より詳細についてはGitHubのREADMEおよびテストケース参照 GitHub https://github.com/tbpgr/tbpgr_utils Rubygems http://rubygems.org/…
概要 Kernel#proc { ... } -> Proc Kernel#lambda { ... } -> Proc 詳細 与えられたブロックから手続きオブジェクト (Proc のインスタンス) を返却。 Proc.new に近い。 処理の中断 nextで処理を中断します。 サンプルコード require 'pp' # 中断 lm1 =-> (x…
概要 格ゲーとプログラミングとスキルの習熟について 詳細 自分がプログラミングの勉強を毎日のようにし始めたのは3年ほど前。 それまではシステム開発の激務にうんざりして別の業種でのんびり仕事をしつつ、 趣味の格ゲーにどっぷり浸かっていました。 ゲー…
デスマコロシアムとは CodeIQで出題している問題。 簡単な問題を解いてトーナメントに参加。 基本的なルールはジャンケン+αによるポイント勝負と言語ペナルティ。 さらに各大会ごとの独自ルールで勝敗を決する。 利用できる言語はideoneで利用可能なものに…