Rubyの定数について

f:id:ryoutaku_jo:20190717024447p:plain

【結論】

・定数は、他言語においては一度値を代入すると書き換えが出来ないものとして扱われているケースが多いが、Rubyにおいては書き換え可能

・既に定義されている定数に再代入しようとすると、警告が出るが、値は書き換わる。メソッドでの書き換えの際は、警告が出ない。

・クラス外から定数を参照する場合、クラス名の後にコロンを2つ重ねて定数名を記述します。

【目次】

【本題】

定数について

定数は、他言語においては一度値を代入すると書き換えが出来ないものとして扱われているケースが多いです。

変数の場合、なんども再代入(書き換え)が出来るので、そこが大きな違いです。

しかし、Rubyにおいては、定数も書き換え可能となっています。

今回は、そんな定数についてまとめます

定数の定義・呼び出し

Rubyで定数を定義する際は、名前の頭文字をアルファベットの大文字から始まる必要があります。

Num = 123
=> 123

Num
=> 123

STR = 'abc'
=> "abc"

STR
=> "abc"

このことから、クラス名やモジュール名なども定数で定義されている事が分かります。

なお、クラス外から定数を参照する場合は、クラス名の後にコロンを2つ重ねて定数名を記述します。

class Int
   Num = 123
end

#クラス名::定数名
Int::Num
=> 123

再代入時の警告

Rubyの場合、定数の書き換えは可能ですが、再代入を行うと警告が出ます。

Num
=> 123

Num = 456
 warning: already initialized constant Num
 warning: previous definition of Num was here

Num
=> 456

メソッドでの書き換え時の挙動

なお、定数の警告は代入時のみで、メソッド呼び出し時は発生しません。

Arr = 1,2,3
=> [1, 2, 3]

Arr.delete(1)
=> 1

Arr
=> [2, 3]

参考情報

定数 (プログラミング) - Wikipedia

定数 - クラスの概念 - Ruby入門

変数と定数 (Ruby 2.6.0)

Ruby | 定数を参照する - Qiita

Ruby 定数について - Qiita

《今日の学習進捗(3年以内に10000時間に向けて)》

現在開発中のCMS機能が私の予想に反して、CKEditorで事足りそうなので、本格的にCKEditorで開発を進めていくことになった。

現状、1番のネックはエディタの編集領域に既存のCSSが反映されない事だと考えている。

CDN経由で読み込むのではなく、ファイル一式をホストして、大元のCSSファイルを修正する必要がありそうで、Webpackが導入されている関係で、どの様にファイルを配置すれば良いのか?などがイマイチ把握しきれていない。

最近開発全体でフロント寄りの改修が増えているので、バックエンド開発がメインとはいえ、この辺りのフロントの最低限の知識はキャッチアップしていきたい。

それと、本日Ruby Silvaに合格した。 業務に即直結する内容では無いものの、例外処理の仕組みなど、プログラミングを行う上で欠かせない概念の理解に役立ったと感じている。

次は、基本情報とPythonによる機械学習自然言語処理、統計解析)を並行して勉強していく予定。

なお、定例でBiz側のリスト管理の内情などを始めて聞いたが、システムによる業務改善の余地がありそうで、非常に興味深かった。

機械学習関連の技術をキャッチアップする中で、スクレイピング・クローリングも習得することになると思うが、せっかく技術を身につけても使う機会が無ければ意味がないので、貪欲に活用できる機会を探っていきたい。 (余裕があれば・・・)

学習開始からの期間 :221日
今日までの合計時間:2123h
一日あたりの平均学習時間:9.7h
今日までに到達すべき目標時間:2018h
目標との解離:105h
「10,000時間」まで、

残り・・・「7877時間!」