[解決済み] Ruby初心者が注意すべきRuby Gotchasとは?[クローズド]
質問
私は最近Rubyというプログラミング言語を学びましたが、全体としては良い言語だと思います。 しかし、思っていたほど簡単ではなかったので、とても驚きました。 より正確には、quot;最小驚きの法則は、私にはあまり尊重されていないように見えました(もちろん、これはかなり主観的なものです)。 たとえば
x = true and false
puts x # displays true!
と有名な
puts "zero is true!" if 0 # zero is true!
Rubyの初心者に警告するような、他のquot;Gotchas"は何ですか?
どのように解決するのですか?
記事より。
- 大文字で始まる名前は定数として扱われるため、ローカル変数は小文字で始める必要があります。
-
文字
$
と@
はPerlのように変数のデータ型を示すのではなく、スコープ解決演算子として機能します。 -
浮動小数点数を表すには、その後にゼロ桁の数字 (
99.0
) または明示的な変換 (99.to_f
). ドットを付けるだけでは不十分です(99.
を付加することはできません。数値はメソッド構文に影響されやすいからです。 -
ブール値でないデータのブール値評価は厳密です。
0
,""
と[]
はすべてtrue
. C言語では,式0 ? 1 : 0
は次のように評価されます。0
(すなわち偽)と評価される。しかし,Rubyでは1
と評価され,すべての数値がtrue
と評価されます。nil
とfalse
はfalse
. このルールの帰結として、Ruby のメソッド、例えば正規表現による検索は、成功すると数値、文字列、リスト、その他の偽でない値を返しますがnil
を返します。この慣習はSmalltalkでも使われていて、特殊なオブジェクトであるtrue
とfalse
はブール式で使用することができます。 -
1.9 より前のバージョンでは、文字データ型がありません (C 言語では
char
を提供しています)。これは、文字列をスライスする際に驚きをもたらすかもしれません。"abc"[0]
は97
(文字列の最初の文字の ASCII コードを表す整数); を得るために"a"
を使う"abc"[0,1]
(長さ 1 の部分文字列) または"abc"[0].chr
. -
表記方法
statement until expression
は、他の言語の同等のステートメント(例えばdo { statement } while (not(expression));
C/C++/...) と違って、式がすでにtrue
. これはstatement until expression
を超える構文上の糖だからです。until expression statement end
であり,C/C++でこれに相当するのは
while (not(expression)) statement;
と同じようにstatement if expression
と同じです。if expression statement end
ただし、表記は
begin statement end until expression
は、たとえ式がすでに真であっても、Rubyでは実際にその文を一度実行します。
-
定数はオブジェクトへの参照であるため、定数が参照するものを変更すると警告が発生しますが、オブジェクト自体を変更すると警告は発生しません。例えば
Greeting << " world!" if Greeting == "Hello"
はエラーや警告を発生させません。これは、次のように似ています。final
変数に似ていますが、RubyにはJavaと異なり、オブジェクトをフリーズさせる機能があります。
他の言語と顕著に異なるいくつかの特徴。
-
条件式のための通常の演算子。
and
とor
は、通常の優先順位の規則には従わない。and
よりもタイトにバインドされません。or
. Ruby には式演算子もあります||
と&&
であり、期待通りに動作します。 -
def
内部def
は、Pythonプログラマーが期待するようなことはしません。def a_method x = 7 def print_x; puts x end print_x end
に関するエラーが発生します。
x
が定義されていないというエラーが発生します。そのためProc
.
言語機能
-
メソッドが複数のパラメータを取る場合、メソッド引数の周りの括弧を省略すると予期しない結果になることがあります。Ruby 開発者は、将来の Ruby バージョンでは複数パラメータを持つメソッドでの括弧の省略を認めない可能性があると述べています。
()
を省略しないよう促す警告が出ます。を使わないで()
というメソッドとともに、人間が読めるドメイン固有プログラミング言語としてのRubyそのものを使うのは、特に素晴らしいことです。method_missing()
.
関連
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rubyのmap(&:name)ってどういう意味?
-
[解決済み] Rubyのincludeとrequireの違いは何ですか?
-
[解決済み] Rubyで||= (or-equals)はどういう意味ですか?
-
[解決済み】Rubyのメソッドで感嘆符が使われるのはなぜ?
-
[解決済み】Ruby: Gemfileの「require: false」はどういう意味ですか?
-
[解決済み】Rubyのincludeとextendの違いって何?
-
[解決済み】Rubyでファイルを読み込む一般的な方法はすべて何ですか?
-
[解決済み] define_methodを使ってクラスメソッドを作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜsumはinject(:+)よりもずっと速いのですか?
-
[解決済み] Hash each ループでインデックスにアクセスすることは可能ですか?
-
[解決済み] rvm use 2.0.0 --default を実行すると、"Warning! PATH is not properly set up" と表示される。
-
[解決済み] JSONファイルへの正しい書式での書き込み方法
-
[解決済み] Rubyの"==="演算子は何をするのですか?重複] [重複
-
[解決済み] 2つのハッシュを比較するにはどうすればよいですか?
-
[解決済み] インストールされているすべてのGemsを削除して最初からやり直す
-
[解決済み] Rubyで「逆レンジ」を繰り返し処理できないのはなぜですか?
-
[解決済み] Rubyのオフ・ザ・レール
-
[解決済み] Ruby の文字列から最後の n 文字を抽出する。