アマグラミング

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

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)シンボルと文字列は変換できる。

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

(70)ハッシュの繰り返し

ハッシュの繰り返しをしてみようかなと思います。 うーん cities = {a: "東京",b: "大阪",c: "福岡"} cities.each do |key, value| puts "#{key}: #{value}"end こうすると cities = {a: "東京",b: "大阪",c: "福岡"} これのkeyの部分の変数を0とかにすると…

(67)ヒアドキュメントと文字列オブジェクトに文字を追加する方法を学ぼう。

複数行の文字列の場合、ヒアドキュメントというものを使うことが出来ます。 <<"識別子" 文章 文章 文章 文章 文章 識別子 こんな感じで書きます。 改行されている場所は実際に改行されます。 識別子の場所は任意ですがEOSというのがよく使われています。 な…

(68)多重代入と自己代入

多重代入について触れておきます。 例えばですけど btA,btB,btO,btAB="A型","B型","O型","AB型" こう書いたとします。 puts btA,btB,btO,btAB とすると 実行するとこうなる 複数の変数に順に左から代入されている。 こんなふうにまとめて変数に代入もできる…

(66)さてさて休憩

さて、少し休みたい。 今はRubyに組み込まれているメソッドの勉強をしていますが、 いちいちメソッドを覚える必要性ってないと思うんですよね。 もちろん、どんなメソッドがあるのかということを把握していることも 重要ですが、もちろん暗記なんてする必要…

(65)delete,delete!メソッドについて学ぼう。

指定した文字列を削除する方法を勉強しましょう。 deleteメソッドを使います。 書き方は例文を見てください。 abc = "ほにゃらら"p abcefg = abc.delete("ほら")p efgp abc cba = "banana"gfe = cba.delete("an")p gfe こう書いてみました。 実行してみると …

(64)insert,index,rindex,include?メソッドについて学ぼう

指定した位置に文字を挿入することを勉強しましょう。 insertメソッドを用います まあとにかく書いてみましょう。 一番目の引数に挿入を開始する位置を、 二番目の引数には挿入したい文字列を指定します。 str = "さよなら" str.insert(2,"う") puts str 実…

(63)文字を取得する、文字の一部分を更新、置き換える

数値を文字列にするにはto_sメソッドを使えばよかったでしたね。 何度もこれは触れているので略します。 では 文字列の中の指定した位置にある文字を取得するやりかたを学びましょう。 str = "goodmorning" aisatu = str[3] puts aisatu これ実行すると 配列…

(62)文字列の大小を比較してみます

文字列の大小の比較について勉強しましょう。 文字にも大小はあります。以前にも触れたと思いますが、 もう一度勉強しましょう。 #coding utf-8str = "a" rts = "z" str1 ="あ" rts1 = "ん" p str1p rts1str2 = "A" rts2 = "Z" if str > rts then p "aとzで…

(61)div,quo,modulo,remainderメソッドを学ぼう

Numericクラスのdivメソッドとquoメソッドについて勉強しましょう。 実際に書いてみますので動きを確認しましょう divとquoは割り算に使えます。 print("10 / 3 = ", 10 / 3, "\n")print("10.1 / 3 = ", 10.1/ 3, "\n")print("10 / 3.3 = ", 10 / 3.3, "\n")…

(60)小数点の計算をメソッドによって変える

以前にも触れましたが、もう一度勉強しましょう。 Floatクラスの数値をIntegerクラスに変換した場合、小数点以下は切り捨てられました。 しかし、四捨五入したかったり、切り上げしたいときもあるでしょう。 豆知識ですが、例えば消費税って会計の時小数点は…

(59)数値クラスの変換

数値のクラスを変換してみましょう。 あんまり使わないかもしれないけど 整数を小数点表記にするには、要はIntegerクラスをFloatクラスにするには to_fメソッドを使う p int = 1.to_f こうすると 1.0って表示される。 逆に FloatクラスからIntegerクラスにす…

(58)Numeric(数値)クラス

Numericクラスは最初からrubyに組み込まれているクラスです。 IntegerクラスとFloatクラスの親クラスです。 Integerクラスは整数を表すクラスでそれを親クラスにしているもので FixnumクラスとBignumクラスがあり Fixnumはコンピュータが普通に扱える範囲の…

(57)モジュールをクラスの中にinclude(インクルード)する

モジュールの使い方としてクラスの中にinclude(インクルード)する方法を勉強しましょう。 includeを使うことによって、モジュールに含まれているメソッドや定数をクラス の中に取り込めます。 クラスの中でモジュールを利用できるようにするには include …

(56)モジュールを使う

モジュールはクラスと違いオブジェクトを作成できるわけではないです。 モジュールは関数みたいに使うかクラスに取り入れるかなどの利用方法がありますが 今回は関数的な使い方の説明をします。モジュール関数ともいいます。 まずはモジュールをつくりましょ…

(55)クラスメソッドについて学ぼう

クラスメソッドについて勉強しましょう。 クラスに対して操作を行うことを目的としたメソッドをクラスメソッドと呼びます。 定義の仕方は以下の通り def クラス名.メソッド名~end class クラス名~def self.メソッド名~end end class Catname def Catname.…

(54)モジュールについて学ぼう

モジュールについて勉強していきましょう。 モジュールについては一度ここのビデオを見ておくと いいかもしれません。 http://www.minituku.net/courses/566428009/contents/591885837.html モジュールの書き方は module モジュール名 処理 end こうです。 …

(53)アクセス制限について学ぼう

アクセス制限について勉強しましょう。 クラスの中でメソッドを定義すると、インスタンスメソッドとして呼び出すことができます。ただし、クラスの内部だけでしか使わない(外部に公開する予定の無い)メソッドも同じように呼び出せては困ります。そのような…

(52)superでオーバライドする親クラスのメソッドを呼び出す場合

親クラスのメソッドに引数がある場合も同じ用にsuperを使って 呼び出せます。 ちょっとやってみます。 class Cats def looks(a) print(a) puts "可愛い" puts "4本足"endendclass Kitten < Catsdef looks(a)super(a)puts "何にでも興味を示す"puts "落ち着き…

(51)superを使ってオーバーライドしたメソッドを呼び出す

親クラスと子クラスで同名のメソッド名を持っているとして superというものを使うと親クラスの同名のメソッドを呼び出して、 実行します。 うーん、なんて言えばいいんだろう。 親クラスのメソッドを子クラスでオーバーライド(定義し直した時) superを使う…

(50)メソッドのオーバーライドを学ぼう

メソッドのオーバーライドについて学びましょう クラスの継承をする場合、親クラスで定義したメソッドをサブクラス側で同じ名前を 使ってメソッドを定義しなおすことができます。 これをメソッドのオーバーライドといいます。 ちょっと書いてみましょう。 cl…