アマグラミング

プログラミング初心者が勉強したことを復習とメモがてら書いているだけです。

Rubyを学ぼう

(99)例外を発生させる

例外を発生させるにはraizeメソッドを使います。 自分で条件を判定した結果によって例外を発生させる場合や、直前に補足した例外を 再び発生させて呼び出し元に伝える時に使います。 raizeメソッドは形式が4つあります。 raize メッセージ RuntimeErrorを発…

(100)エラーメッセージ

エラーメッセージは出てしまうものです。 なので、なにを間違えているのかは重要です。 エラーメッセージは英語ですが、読むのを面倒だとしてしまえば、 エラーの解決により多くの時間を割かなければなりません。 いくつかのエラーについて説明していきまし…

(98)特定の例外を処理させる

rescueの後に例外のクラス名を付けることによって その例外の時だけ行う処理を書けます。 例外もオブジェクトです。 全ての例外はExpentionクラスのサブクラスです。 そしてエラーの種類に応じた例外を定義しています。 組み込みの例外クラスは http://doc.o…

(96)例外処理その2

例外処理でメソッドの処理全体をくくる場合は beginとendを省略できる。 def piyo メソッド定義の処理 rescue => ex 例外処理 ensure 後処理 end 同様にクラスの定義でもできますが、クラスの定義内で例外が発生すると以降のメソッド定義も行われないので、…

(97)複数のrescue

複数の種類の例外が発生する可能性があり、個別に対処したい場合、 複数のrescue節を記述することで、処理を分けることができます。 begin 例外を発生させると思われる処理 rescue Expention1, Expention2 => 変数 Expention1またはExpention2に対する処理 r…

(92)例外処理

プログラムを実行するとエラーが起こり、例外が発生することがあります。 その場合、プログラムは一時中断して、例外処理を探します。 もし、例外処理が記述されていれば、それを実行します。 なければ、エラーメッセージが表示されて ファイル名:行番号:i…

(93)後処理

例外のあるなしにかかわらず、実行したい処理がある場合には、 ensure節に後処理を記述します。 begin 例外を発生させると思われる処理 rescue 例外が起こった場合の処理 ensure 例外あるなしにかかわらずに実行する処理 end

(94)retry

rescue節でretryを用いると処理をもう一度やり直せます。 しかし、何度やっても同じ場合、無限ループになりますので、 そうならないように注意すること。

(95)rescue修飾子

ifやunless修飾子のように、rescueにも修飾子がある。 式1 resucue 式2 の形を取る 1や2というのは begin 式1 rescue 式2 end こういうこと つまり最初の式は例外を発生させると思われる式の方。

(91)モジュールの持つ名前空間

名前空間とは、メソッドや定数、クラスなどを区別して管理する単位。 モジュールは独立した名前空間を提供する。 例えばAとBのモジュールがあったとして、 それぞれにhogeというメソッドがあるとする。 だけどそれぞれは別のhogeメソッドとして扱われる。 定…

(90)特異クラス、特異メソッド

class << クラス名 ~ ...end この書き方のクラス定義を特異クラス定義という。 これで定義したメソッドを特異メソッドという。 特異メソッドは任意のオブジェクトだけに利用できる。 ちょっと書いてみる。 yosuke = "よう" yukiko = "おはよう" class << yuk…

(89)aliasとundef

既に存在するメソッドに別の名前を割り当てたい場合にaliasを使うこともある。 書き方としては alias 割り当てたいメソッド名 元のメソッド名 もしくは alias : 割り当てたいメソッド名 :元のメソッド名 シンボルを使ってこう書く 同じ機能を持つものを複数…

(88)instance_methods (クラスに定義されているメソッドを知る)

instance_methodsを使うとクラスに定義されたメソッドの一覧をシンボル形式の 配列で表示できる。 試しにBasicObjectとObjectクラスになんのメソッドがあるか見てみる。 puts BasicObject.instance_methodsputs "---------------------------"puts Object.in…

(87)メソッド定義内のselfがよくわからんちん

インスタンスメソッドで、メソッドのレシーバーを参照するには selfという特別な変数を使います。 まあやってみます。 class HelloWorld attr_accessor :name def initialize(name) @name = nameend def ababa puts "こんにち#{self.name}"endendcat = Hello…

(86)classメソッド、instance_of?メソッド、is_a?メソッド

オブジェクトがどのクラスに属しているのかを調べるには classメソッドを用います str = "ababa" num = 5 ary = [] p str.class p num.class p ary.class 実行すると オブジェクトがあるクラスのインスタンスかどうかの真偽を知るには instance_of?メソッド…

(85)マニュアルやドキュメントにあるメソッド名の表記法 

マニュアルやドキュメントにあるメソッド名の表記法として クラス名#メソッド名 の形で書かれていることがあるが、これは説明用の表記なので実際にプログラムに書くとエラーになるので注意

(84)メソッドの種類

メソッドには種類があります。 Rubyは3種類に分けられます。 インスタンスメソッド クラスメソッド 関数的メソッド この3つです。 インスタンスメソッドは、一般的なメソッドで あるインスタンス(オブジェクト)があったとき、 そのオブジェクトをレシーバ…

(83)オブジェクトのIDについて学ぼう

オブジェクトには全てIDがある。 オブジェクトのIDはobject_idメソッドでわかります。 例えば p "あ".object_id 実行すると こんなふうにIDが返される。 オブジェクトのIDが同一かどうかはequal?メソッドを使う。 p "あ".object_id a = "str" b = "num" c = …

(82)===とはなんなのか、少しわかった。

以前case文の中は if文でcase文を表すと if 条件式 === 変数 <文> elsif 条件式 === 変数 <文> elsif 条件式 === 変数 <文> ・・・ else <文> end こんな風になると書きました。で ===ってなんなんだろう。 より厳密な==なんだろうか というよ…

(81)case文でクラスを判別する。

case文でクラスを判別する文が書けるらしいんですよ。 へーと思ったので a = ["あ",159,nil] #こんな風に配列を作りました。 a.each do |nyan| case nyan when String puts "string class" when Numeric puts "numeric class" else puts "something class" e…

(80)empty?メソッド

empty?メソッドは対象の文字列の長さが0の時にtrueを、 0ではないときにfalseを返すメソッドです。 a = "今年は猛暑らしいにゃ"p a.empty?b = ""p b.empty? 仮にこう書いたとすると 実行するとこうなります。 入力を受け付けるgetsメソッドとかの入力がなさ…

(79)ローカル変数とグローバル変数

Rubyには以下の変数があります。 ローカル変数 グローバル変数 インスタンス変数 クラス変数 変数がどれかは名前でわかります。 アンダーバー(_)か小文字のアルファベットで始まるのがローカル変数 頭文字が$で始まるのがグローバル変数 @で始まるのが…

(78)もう一度、オブジェクトやクラス、そしてインスタンスとはなにかという点について、勉強する

オブジェクト、 rubyでの基本的な単位。 種類は色々ある。 数値のオブジェクト、文字のオブジェクト 配列のオブジェクト、ハッシュのオブジェクト 範囲のオブジェクト、時刻のオブジェクト 例外のオブジェクト・・・などなど 色々ある。 クラス、 クラスはオ…

(77)require,require_relativeメソッドでライブラリを読み込みましょう

プログラムの一部を、別のプログラムの中で使いまわしたいことがあります。 ほとんどのプログラミング言語では。別々のファイルに分割されたプログラムを組み合わせて、一つのプログラムとして利用するための機能を持っています。 他のプログラムを利用する…

(76)コマンドラインでファイルを読み込む、マッチングする

ファイルを読み込んでみましょう。 指定したファイルの中身を表示するプログラムを作ります。 指定したファイルはこれから書くソースコードのファイルと同じフォルダに 入れておきましょう。 ファイルを開いて、テキストデータを読み込んで、それを出力して…

(75)コマンドラインからデータの入力をする

Rubyのプログラムにデータを入力してみましょう。 プログラムにデータを与えるには、コマンドラインを利用する方法が楽です。 コマンドラインの情報をデータとして受け取るために 「ARGV」という配列オブジェクトを使います。 ちょっと書いてみましょう。 pu…

(74)ブロックってなんだかよくわからないのであった。

ブロック付きメソッドについて勉強しましょう。 ブロック付きメソッドとは例えばeach文や、timesメソッドなどで オブジェクト.each do |変数| ・・・ end のdo~endで囲まれている部分をブロックと言います。 ふーん。ブロックってそういう意味だったのか。 …

(73)nilについて

nilについて説明してなかったので、ここで勉強しましょう。 nilは特別な値で、「オブジェクトがない」ということを表します。 マッチングの際にマッチングしなかったことを表したり、 例えば、配列やハッシュで存在していないものを取り出そうとしたりすると…

(72)正規表現を使い、マッチングを行う。

Rubyで正規表現というものが使われます。 正規表現を使うと、 文字列とパターンの一致や パターンを使った文字列から抜き出したい ときなどに使えます。 〇〇という文字列を含んでいる行を探して表示したい。 〇〇と△△の間にある文字を抜き出したい時など そ…

(71)シンボルと文字列は変換できる。

シンボルについて勉強します。 シンボルというのは文字列に似たオブジェクト。 先頭に:をつける。 シンボルと同様のことはだいたい文字列でもできる。 単純に同じかどうか?を比較するような場合は文字列を使う場合よりも効率が良い。 シンボルと文字列はお…