Ruby

Privateメソッドについて(Ruby)

【結論】 ・Privateメソッドとは、同じクラスのインスタンスメソッドからしか呼び出せないメソッド ・Privateメソッドは、暗黙的にselfから呼び出されるので、オブジェクトから明示的に呼び出すことは出来ない ・同じクラス内でしか使用しないメソッドが、意…

Procオブジェクトについて

【結論】 ・Procオブジェクトとは、ブロックをオブジェクト化したもの ・オブジェクト化することで、変数に代入してメソッドに引数として渡すなど、自由に扱うことが出来る ・ Proc.new、proc、lambda、->と複数の生成方法が存在する 【目次】 Procオブジェ…

アクセスメソッド(アクセサメソッド )について(Ruby)

【結論】 ・アクセスメソッド(アクセサメソッド )とは、インスタンス変数の値を、クラス外からでも参照したり書き換え出来るようにするメソッド ・Rubyの場合、attr_reader/attr_writer/attr_accessorというメソッドで簡単に定義することが出来る ・定義後…

ビット演算について(Rubyでの演算方法)

【結論】 ・ビット演算は、電気のON/OFFをビット(2進数の1桁)で表現し、それらを組み合わせることで、コンピュータに様々な演算を行わせること ・ビット演算子とは、整数に対してビット単位での演算を行う為の演算子 ・&で論理積、|で論理和、^で排他的論…

Rubyの定数について

【結論】 ・定数は、他言語においては一度値を代入すると書き換えが出来ないものとして扱われているケースが多いが、Rubyにおいては書き換え可能 ・既に定義されている定数に再代入しようとすると、警告が出るが、値は書き換わる。メソッドでの書き換えの際…

Rubyの「|」「&」「||」「&&」の違い

【結論】 ・「||」「&&」は、論理演算子と呼ばれ、条件式で論理積(AND)や論理和(OR)を指定する際に用いられる ・「|」「&」は、Integerクラス(数値)ではビット演算子、Arrayクラス(配列)では集合の演算子として機能する ・「|」「&」はオーバーライ…

破壊的メソッドについて

【結論】 ・破壊的メソッドとは、レシーバにあたるオブジェクトの値を変更してしまうメソッド ・破壊的メソッドは、メソッド名に!を付ける慣習がある ・しかしRubyでは、他に同名のメソッドが存在しない破壊的メソッドには!が付いていない為、注意が必要 …

Rubyのパーセント記法について

【結論】 ・文字列(Stringクラスのインスタンス)を生成する際、通常は""や''で文字を囲って、文字列と認識させる必要がある ・パーセント記法とは、""や''以外の記号などで文字列を囲って、文字列と認識させる記法 ・可読性の向上やコード量の削減といった…

「permutation」「combination」メソッドによる順列/組み合わせの数え上げ

【結論】 ・permutation メソッドは、配列から引数n個の要素を選んだときの順列を数え上げる。 ・combinationメソッドは、配列から引数n個の要素を選んだときの組合せを数え上げる。 ・要素の重複を許可する場合はrepeated_combination メソッド(repeated_p…

シャドーイングについて(ブロック引数とブロック外の変数が同名の場合)

【結論】 ・ブロック引数と、ブロック外の変数の名前を一緒にした場合、ブロック内ではブロック引数が参照される ・この様に、変数やメソッドを参照できなくする機能はシャドーイングと呼ばれる ・動作はするが、可読性が落ちるので、原則同じ名前は避ける方…

puts/print/pの違い(Ruby)

【結論】 ・Rubyで標準出力に出力する方法は、標準ライブラリに3種類(puts/print/p)存在する ・printは、引数のオブジェクトを文字列に変換し、標準出力に出力する。putsは、更に改行を加える。戻り値はnilになる。 ・pは、引数のオブジェクトを分かりやす…

文字を省略する際に、全角/半角を考慮する方法と、中間で省略する方法(Ruby)

【結論】 ・文字を省略する際、全角/半角を考慮しないとレイアウトが崩れる場合がある。また末尾で省略すると、ファイル名なら拡張子が見えなくなるという問題が発生する。 ・全角/半角を考慮する場合は、bytesizeメソッドを利用する ・中間で省略する場合は…

shiftメソッドで、配列の最初の要素を削除して返す

【結論】 ・shiftメソッドは、配列の最初の要素を返して、その要素を削除するメソッド ・引数を指定すると、その数だけ要素を返して、削除を行う ・繰り返し文以外で、連番を付与したい場合などに利用できる 【目次】 shiftメソッドについて 引数で操作する…

sendメソッドについて

【結論】 ・sendメソッドとは、レシーバーの持っている メソッドを呼び出すメソッド ・第二引数に指定した値を 呼び出したメソッドの引数に渡す事も出来る ・呼び出したいメソッドを変数で指定して 条件分岐させる際などに有用である 【目次】 sendメソッド…

三項演算子について

【結論】 ・三項演算子(条件演算子)とは、 戻り値を条件によって切り替えたい場合に 利用する演算子 ・IF文だと複数行にまたがる処理を 一行で記述する事が出来る ・但し、複雑な条件式で使用すると 可読性が悪くなる傾向にある。 【目次】 三項演算子につ…

case文による条件式

【結論】 ・case文とは、条件式の一つ。 複数の候補の中から、 一致する場合の処理を行う。 ・IF文では、ture/falseしか表現出来ないので、 内容によっては、case文の方が 可読性が高くなるケースがある。 ・3つ以上の候補の中から、 合致する値を探す様な …

「&.(アンド ドット)」と「try」の違い

【結論】 ・「&.(アンド ドット)」と「try」は どちらもレシーバーがnilの時に、 「NoMethodError」ではなく、 「nil」を返してくれる機能 ・「&.(アンド ドット)」は、そもそもメソッドが 定義されていない場合には、エラーを返す。 ・「try」は、メソッド…

count、length、sizeは何が違うのか?(Ruby)

【結論】 ・countメソッドは、配列の要素の数を返す。 ブロック引数を指定すると、ブロック内の条件式を繰り返し実行し、 合致する要素の数を返す。 ・lengthまたはsizeメソッドは、 文字列中の文字の数を返す。 配列に対して使用すると、要素の数を返す。 …

「pluck」と「map」の違いについて

【結論】 ・任意のカラムの配列を取得する方法として 「pluck」と「map」の二つのメソッドが存在する ・「map」はRubyのメソッドで、 要素の数だけブロックを実行し、戻り値を集めた配列を返す 「pluck」はRailsのメソッドで 指定任意のカラムの配列を取得す…

nil:NilClassの「NoMethodError」への対処方法

【結論】 ・nilとは「何も存在しない」という事を表すオブジェクト・nilは「NilClass」クラスのオブジェクトなので、 「NilClass」クラスに定義されていないメソッドを使用すると 「nil:NilClass (NoMethodError)」というエラーが発生する・このエラーには下…

配列を順番に処理するメソッドの色んな書き方

【結論】 ・eachやmapなど、配列の要素毎に処理を 繰り返すメソッドは、省略した書き方がある・do...endの記述は、中カッコ{}で代用できる・{|変数| object.method}の代わりに (&:method)と記述することも可能・但し、一行で書く方法は、可読性が悪くなるの…

型変換の理解が甘かった話

【結論】 getsで取得した値には、末尾に改行(\n)が付与される 末尾に「\n」が付いた文字列を「to_sym」で型変換すると、 「:”apple\n”」という様に、文字列を「””」で囲ってから、 頭に「:」するという処理を行う これにより、同じ文字のシンボルオブジェ…

Rubyのシンボルはクセ者だった

【結論】 シンボルとは、文字列の見かけをした整数 文字列の代わりとして扱え、整数なので素早い処理が可能 但し文字列と異なる振る舞いをする事もある 構造を正確に把握しないと、コード書くときに躓く 【目次】 面白そうなサイトを見つけたのが始まり とあ…

ダブルクォーテーションとシングルクォーテーションの違いって?

【結論】 ・ダブルクォーテーション(”)で文字列を作った場合、 ダブルクォートで囲まれた文字列では、 バックスラッシュ記法(\n)と式展開が有効になる。 ・シングルクォーテーション(’)だと、文字列の中身の解釈は行われない為、 バックスラッシュ記法…

Rubyを使った10の位の求め方が、考え過ぎて楽しくなった話

【結論】 ・Rubyでは、整数同士の割り算をする場合、小数部分は切り捨てられる ・これは式内の数値が全てIntegerクラスであれば、 プログラム側は型変換を行わないので、返り値はIntegerになる為 ・Integerクラスは整数を扱うクラスなので、小数は扱えない …