はじめに
RubyとJavaScriptの違いに手間取ったので備忘録
JavaScriptのコード
let sample = "tee"
const hello = () => {
if(sample === "tee") {
return "teeです"
} else {
return "該当しません"
}
}
console.log(hello()) //出力結果 "teeです"
Rubyのコード
sample = "tee"
def hello
if sample == "tee"
return "teeです"
else
return "該当しません"
end
end
puts(hello())
# 出力結果
# undefined local variable or method `sample'
JavaScript
では関数の外側(レキシカルスコープ)の変数を参照可能です。
Ruby
ではできない。これちょっとひっかりました・・・
初めて学習した言語がJavaScriptだったので、JS基準で考えてしまいます。
追記
@kagilinn 様からコメントいただきましたありがとうございます。
先頭が小文字: ローカル変数. 代入されたメソッドの, 代入された場所以降
先頭が大文字: 定数. 代入されて以降, そのクラスに所属して広範囲で読み取れるが, 代入しなおすことができない
先頭が @: インスタンス変数. 実行されたオブジェクトに所属する.
先頭が @@: クラス変数. 実行されたクラスに所属する.
先頭が $: グローバル変数. 代入されて以降どこでも読み書き可能. 但し理由がない限り使わないほうが良い.
こうして文字にするとわかりやすいですね。
js
const sample = "hogehoge"
const sampleDef = () => {
// 関数
}
rb
sample = "hogehoge"
def sample_def
# 関数(メソッド)
end
このように同じ場所(JavaScript
でいうところのグローバルコンテキスト)で変数を定義したとしても
JS
はグローバル変数として
Ruby
はローカル変数として
定義される違いがあるのですね。
勉強になりました!!