一緒にRubyを征服します! 第七のドロップ

このドロップでは、私たちが調べたすべてのトピックをもう一度調べて、失われた興味深いものを探してそれらを掘り下げます。

注意! これがRubyブログに投稿された最後のストローです! 過去(1、2、3、4、5、6)はすべて、既に新しいStartup Programmerブログに載っています 。 このブログは、初心者や、場合によっては最初から段階的に学習したい、または価値のあるプログラミング言語を習得したいと思っている「シーズンのある」プログラマーを対象としています。 ドロップの追跡がさらに簡単になりました!


入力と検査


puts "What is your name?"
STDOUT.flush
chompname = gets.chomp
puts "Again, what is your name?"
name = gets
puts "Hello, " + name
puts "Hi, " + chompname
puts 'But name = ' + name.inspect + ' and chompname = ' + chompname.inspect


STDOUTは、標準出力チャネルを示す標準グローバル定数です。 flushメソッドは、Rubyの内部I / Oバッファー内のすべてのデータをフラッシュします。 このコード行の使用はオプションですが、推奨されています。 すべての定数は大文字で始める必要があることに注意してください。

getsは、1行の入力を受け取り、それを変数に渡します。 chompStringクラスのメソッドです。 同じ結果が得られるという事実にもかかわらず、 getsは文字列と\n返すことを覚えておく必要getsますが、 chompはこの\n削除します(メソッドはキャリッジリターン\r\r\n組み合わせも削除します)。

これは、 inspectメソッドを使用して簡単に実証できますinspectメソッドの役割は、変数、クラス、一般的にはRubyオブジェクトを「調べる」ことです。

メソッドの句読点


メソッドの最後にある感嘆符は、結果を返すだけでなく、適用先のオブジェクトも変更することを意味します(これはいわゆる「危険な」メソッドです)。 stripメソッドは、行末のスペースを削除します。

 string = 'Bring, bring ' a = string.strip! puts string puts a 


疑問符メソッド、いわゆる述語trueまたはfalseのみを返しfalse 。たとえば、配列メソッドはempty? 配列に要素がない場合はtrueを返します。

a = []
puts "empty" if a.empty?


方法はありany? 逆に、要素が配列に存在する場合はtrueを返し、 nonzero?を返しtruenonzero? Numericクラスで定義されたNumericは、呼び出されたNumericnil場合はnilを返し、それ以外の場合はこの数値を返します。

Use%w


単語の配列を作成するのは大きな頭痛の種になることもありますが、Rubyではこれを単純化しています: %w{}は必要なことを行います:

pets1 = [ 'cat', 'dog', 'snake', 'hamster', 'rat' ]
pets2 = %w{ cat dog snake hamster rat } # pets1 = pets2


条件分岐


条件式を使用すると、コード実行の方向を制御できると既に述べました。 これらの表現を繰り返し、新しい表現を学びます。

もし

 a = 7 if a == 4 a = 9 end 


しかし、Rubyがタスクを単純化していなければ、RubyはRubyになっていなかったでしょう。 完全に類似したサイクル:

a = 7
a = 9 if a == 4


if-elsif-else

条件の例:

 a = 7 if a == 4 a = 9 else if a == 7 a = 10 end end 


elsifは、この条件を可能な限り単純化し、以下を取得します。

 a = 7 if a == 4 a = 9 elsif a == 7 a = 10 end 


トリプル演算子

a = 7
plus_minus = '+'
print "#{a} #{plus_minus} 2 = " + (plus_minus == '+' ? (a+2).to_s : (a-2).to_s)


デザイン[? (expr) : (expr)] [? (expr) : (expr)]は三項演算子(Rubyで唯一のトリプル)と呼ばれ、式を計算して結果を返します。 このようなコードは読みにくいため、2次タスクにのみ使用することをお勧めします。 最初のオペランドは前にカウントされ? 値がfalseではなくnilでない場合、2番目のオペランドの値は式の値になり、そうでない場合は3番目( :後)になり:

ながら


while 、Rubyの構文は、他のPLのifおよびwhileと似ていif

 a = 0 while a < 5 puts a.to_s a += 1 end 


いつものように、ループは1行に配置できます: <......> while <>

記号


コードでは、 Symbolは変数名のように見えます。たとえば、::アクションで始まります。 Symbolは、Rubyで作成できる最も単純なオブジェクトです。名前とIDのみがありID 。 シンボルは文字列よりも効率的で生産的です-シンボルの名前はプログラム全体で1つのオブジェクトを指し、同じ内容の2行は異なるオブジェクトです-これにより時間とメモリが節約されます。

 ruby_know = :yes if ruby_know == :yes puts "You're a good guy!" else puts 'Learn Ruby!' end 


この例では、 :yes - symbol 、値またはオブジェクトを含まず、代わりにコードの定数名として使用されます。 冷静に置き換えることができ:yesを文字列"yes"と、結果は同じになりますが、プログラムの生産性は低下します。 Kaneのすばらしい記事「文字と文字列の違い」でトピックの詳細を学ぶことができます

連想配列


連想配列(以降、ハッシュ)は、オブジェクトの順序付けられたセットも含むため、配列に似ています。 ただし、配列では、オブジェクトは数字でインデックス付けされ、ハッシュでは、インデックスは任意のオブジェクトにできます。 簡単な例:

 h = {'dog' => 'sobaka', 'cat' => 'koshka', 'donkey' => 'oslik'} puts h.length # 3 puts h['dog'] # 'sobaka' puts h # catkoshkadonkeyoslikdogsobaka 


ご覧のとおり、ハッシュ要素は順序付けられていないため、ハッシュはリストやキューなどには適していません。

文字列を引用符で囲んだい場所ならどこでも、 symbol使用を考えてください:

users = Hash.new
users[:nickname] = 'MaxElc'
users[:language] = 'Russian'
puts users[:nickname] #MaxElc


エピローグ


Rubyでのさらなる開発に必要なもう1つの小さくて興味深いデータ。 コメントを歓迎します!

Source: https://habr.com/ru/post/J49013/


All Articles