*ブログに戻る →ここ です。


Rubyの学習 free193
定数について

↓Rubyのプログラムを実行すると以下のように表示される。

C:\RubyTest>ruby test_sada13-5.rb
定価 \100円
定価 \80円
定価 \10500円
定価 \120円
定価 \1500円
合計は \12300円
60%OFFだと \7380円
定数に名札付けた値は0.6

定価 \100円
定価 \80円
定価 \10500円
定価 \120円
定価 \1500円
なぜか小数点が含まれ、おかしな結果になってしまった
60%OFFだと \7379.999999999995円
定数に名札付けた値は4.6

スタートしました
いっかいめ
にかいめ
さんかいめ
よんかいめ
ごかいめ
テストを終了します
個別のオブジェクト数は 7個です
  
C:\RubyTest>




Sunday,October,6,2013

プログラムの表示

=begin Sunday,October,6,2013 ○値から謎の多いクラス名を調べてみる。 ルビーの値(オブジェクト)が所属するクラス Numeric (説明はfree171.html)[step]メソッドはNumericクラスである。 [step]メソッドは、任意に決めた浮動小数点の値を繰り返し足していく事ができるメソット。 Float (浮動小数点数) Integer (説明はfree170.html)[times][upto][downto]メソッドはIntegerクラス Numericのサブクラスでもある。 このメソッドは要素などの値の範囲を指定し、for句(演算子)と連動させる事で変数へ繰り返し値を名札 付けしながらブロック内のプログラムを実行させる。 Bignum (大きな整数) Fixnum (整数) Kernel [loop]メソッドはKernelクラスである。無限に繰り返しを行なう。(今回学習した) PHPでの値の型 string (文字句) integer (数字) double (小数点) free147.php ←ここで試した。 謎の多いクラスを調べる方法は下記、またの機会に別のページで試してみます。 #! ruby -Ku print("定近です。".class())←クラスを調べるには、これを使って調べます。 print("\n") #! ruby -Ku ← の「u」とは、UTF-8 のこと(文字化けを回避します)。 s or S Shift_JIS e or E EUC-JP u or U UTF-8 n or N NONE(ASCII) 「require」メソッドで「kconv」ライブラリを読みんで、モジュール関数「Kconv.tosjis()」 を使用することにより表示の時に Shift_JIS に変換している。(メソットというからにはクラスがあるんでしょうね) まだきちんと理解できていません。 保存するときは、文字コードセットを UTF-8 にすること。 サクラエディタを使用しています。 コマンドプロンプトを開きます。 C:Documents and Settings\User> C:Documents and Settings\User>cd C:\rubytest と入力する。「cd」カレントディレクトリの略。現在のフォルダという意味(フォルダは任意の名前で自作した) C:\RubyTest>ruby test_sada13-5.rb そして保存したファイル名を打ち込む。 =end #コメントテスト、ファイル名test_sada13-5テキスト #--------------------------------------------------- #! ruby -Ku require "kconv" #上記の日本語変換「require "kconv"」は使用していないが文字化けもしない #-----------定数を学習する、テーマは商品の値段を合計して割引価格をもとめる---------- class SdaReji #クラスメイは頭を大文字にすること SALE = 0.6 #定数は一度だけ値を名札付けられる、参照する時は「クラス名::定数名」 def initialize(_sadachi=0) #真、偽に関わらず勝手に必ず実行するメソッド「initialize」と、値が名札付けされえいない時のデフォルト値をゼロとする設定 @sum = _sadachi #オブジェクトが別ならば値は上書きされない、なんて名前だったか忘れた。 end def _sadaKounyuu(_sadachika) @sum += _sadachika #オブジェクト「_sadaKounyuu(引数)」の引数を、変数に名札付けする「+=」設定 print("定価 \\", _sadachika, "円\n") #オブジェクトが実行されるたびに引数をプリントしていく end #出力に円マークの特殊記号も入れた def _sadaGoukei() #オブジエクト「_sadaGoukei() 」を変数「@sum」として出力する設定 return @sum end def _sadaSaleGoukei() #オブジエクト「_sadaSaleGoukei() 」を演算した答えの値として出力する設定 return @sum * SALE #本来40パーセントオフなら0.6を掛ければいいのだが、定数から引き算を行ないたいがために4.6から4を引いた end end #↓オブジェクト↓クラス名、クラス名を文字列オブジェクトに短縮して名札付ける準備段階 _sada1 = SdaReji.new(0) #お手本は引数にゼロが当てられているが今回は空で試す _sada1._sadaKounyuu(100) #引数に商品の値段を名札付けている _sada1._sadaKounyuu(80) #以下同じ _sada1._sadaKounyuu(10_500) #以下同じ _sada1._sadaKounyuu(120) #以下同じ _sada1._sadaKounyuu(1500) #以下同じ print("合計は \\", _sada1._sadaGoukei(), "円\n") print("60%OFFだと \\", _sada1._sadaSaleGoukei(), "円\n") print("定数に名札付けた値は", SdaReji::SALE, "\n") #参照する時は「クラス名::定数名」 =begin 注意、プリント時に変数「@sum」を書いても値が参照されていので、今回はオブジェクトから呼び出した やりたいテーマ、実行するたびにカウントを1プラスして、そのカウントした回数の値を合計金額から割って平均を求めたい きっと出来るがまたにする 出力時の値を右詰めとかやりたいな =end #------------------------- print("\n") class SdaTest #クラスメイは頭を大文字にすること THESALE = 4.6 #定数は一度だけ値を名札付けられる、参照する時は「クラス名::定数名」 def initialize(_sadaTchi=0) #真、偽に関わらず勝手に必ず実行するメソッド「initialize」と、値が名札付けされえいない時のデフォルト値をゼロとする設定 @sum = _sadaTchi #オブジェクトが別ならば値は上書きされない、なんて名前だったか忘れた。 end def _sadaKounyuu(_sadaTchika) @sum += _sadaTchika #オブジェクト「_sadaKounyuu(引数)」の引数を、変数に名札付けする「+=」設定 print("定価 \\", _sadaTchika, "円\n") #オブジェクトが実行されるたびに引数をプリントしていく end def _sadaGoukei() #オブジエクト「_sadaGoukei() 」を演算した答えの値として出力する設定 return @sum * (THESALE - 4) #本来40パーセントオフなら0.6を掛ければいいのだが、定数から引き算を行ないたいがために4.6から4を引いた end end #↓オブジェクト↓クラス名、クラス名を文字列オブジェクトに短縮して名札付ける準備段階 _sada2 = SdaTest.new(0) #お手本は引数にゼロが当てられているが今回は空で試す _sada2._sadaKounyuu(100) #引数に商品の値段を名札付けている _sada2._sadaKounyuu(80) #以下同じ _sada2._sadaKounyuu(10500) #以下同じ _sada2._sadaKounyuu(120) #以下同じ _sada2._sadaKounyuu(1500) #以下同じ print("なぜか小数点が含まれ、おかしな結果になってしまった\n") print("60%OFFだと \\", _sada2._sadaGoukei(), "円\n") print("定数に名札付けた消費税率の値:", SdaTest::THESALE) #参照する時は「クラス名::定数名」 print("\n\n") #-----------クラス変数について-------------------- =begin お手本 class クラス名 @@name = 値 end =end class SadaBox @@count = 0 #最初にオブジェクトが作成されたときだけクラス変数に値を名札付ける #インスタンス変数はオブジェクト毎に値を名札付けできたが、 #クラス変数は全てのオブジェクトで参照、加筆をおこなう def initialize(_sadacika="値を入力してください") #オブジェクトが作成されるたびに、このオブジェクト「initialize(引数)」が実行される @name = _sadacika #引数が空の値ならデフォルト「値を入力してください」が名札付けられる #インスタンス変数はオブジェクト毎に違う値を名札付けられる @@count += 1 #○クラス変数は個別のオブジェクトの命令を受け付けない、オブジェクトを一様に受け付ける print(@name, "\n") end def _sadaCount() #メソット「_sadaCount(引数)」は、クラス変数「@@count」の値を返す return @@count; end end _sada1 = SadaBox.new("スタートしました") #インスタンス変数の長所であるオブジェクト毎「_sada1, _sada2, _sada1」に値を名札付けられるテスト _sada2 = SadaBox.new("いっかいめ") #以下同文 _sada3 = SadaBox.new("にかいめ") #以下同文 _sada4 = SadaBox.new("さんかいめ") #以下同文 _sada5 = SadaBox.new("よんかいめ") #以下同文 _sada6 = SadaBox.new("ごかいめ") #以下同文 _sada7 = SadaBox.new("テストを終了します") #以下同文 print("個別のオブジェクト数は ", _sada1._sadaCount(), "個です\n") #関数のようにオブジェクトを使う場合は「オブジェクト名.メソッド」のようです


* 参考にしたサイトは→ こちら です。

これは赤色の文字例です。

これは青色の文字例です。