一緒にRubyを征服します! 3番目のドロップ

滴下。 3番目のドロップ( ドロップ1ドロップ2 )では、数値変数に精通し、OOPの原理について学びます。

数字と式


プログラミングでは、式は数値、演算子、および変数の組み合わせであり、コンピューターが理解すると、何らかの形で結果を生成します。 以下に例を示します。

8
2 + 3
"a" + "b" + "c"
100 - 5 * (2 - 1)
x + y


単純なコードを考慮して解析します。

x = 5
y = x * 20
x += y
puts x


x値5を与え、 yx * 20 (100) y設定します。 次に、 xyを追加して結果を出力します。 すべてが完全に明確で、唯一の問題は3行目で発生します。 x = x + yと書く方が適切に思えますが、これはRubyシュガーの一部です。 x *= yおよびx /=使用することもでき、 x += 1は変数を1つ増やします。

比較演算子と条件

別のコード:

age = 22
puts "Sovsem Molodoi!" if age < 25


コンピューターは、指定された操作(それ以外の場合は単なる計算機)を実行するだけでなく、ロジックを使用して作業の方向を決定します。 コード実行の結果は予測可能です。 2行目を分析しましょう。 まず、 age < 25よく知られている "more / less"(および==>=<=<= >= , <=> != )に注意してください<=>ます。 さらに、他の言語でよく知られている条件ifます。 thenどこでendますか? 別のRubyの砂糖、実際には2行目はコードに完全に似ています:

if age < 25 then
puts "Sovsem Molodoi!"
end


条件を組み合わせることができます。 逆の効果を得るために、次の場合をunless 、単語を使用できます。

age = 24
puts "You're NOT a teenager" unless age > 12 && age < 20


コードは明確です。 どうぞ

イテレータ

ここに私たちを待っているものがあります:

4.times do puts "Ruby" end

コードを実行してみましょう。結果はputs 4回の実行です。 分析します。 最初に数字の4が取得され、次にtimesメソッドが適用され、Rubyのすべての数字に適用されます(メソッド?メソッドとは?このアクション-これについては後で説明します)。 メソッドにデータを渡す代わりに、 doend間でコードを渡します。 timesメソッドは、このコードを4回実行します。 いつものように、Rubyはプログラムをより快適に書くことを望んでいるため、別の安心を与えます。 doおよびendなしの完全に類似したコード:

4.times { puts "Ruby" }

Ruby(および他のPL)でも、ループを作成するメカニズムの1つは反復子です。これは、セットのすべての要素を反復処理できるオブジェクトです。 私たちの場合、ループを設定するか、4回繰り返します。 Rubyの数値に適用可能な他のイテレーターを見てみましょう。

1.upto(5) { ... ... }
10.downto(5) { ... ... }
0.step(50, 5) { ... ... }


それぞれの目的は明確だと思います。 再びコード:

1.upto(5) { |number| puts number }

その結果、プログラムは「5つまでカウントします」-反復状態をコードに渡しました。 ループコードの先頭で、数値「1〜5」が変数number送信されます。

浮動小数点

確かに、以前に書かれたすべてのプログラムでは、変数を宣言する必要はなく、その型を決定する必要があることに気づきました。Rubyがこれを行います(砂糖をなめ続けます)。 分割してみましょう: puts 10 / 3 。 結果は3です。入力数値は整数であるため、結果はそのまま残ります。 ルビーは助けたいと思ったが、成功しなかった。 彼に伝えましょう: puts 10.0 / 3.0 。 解決策は簡単でした!

着信番号を制御できない状況に陥ることがありますが、解決策があります。

x = 10
y = 3
puts x.to_f / y.to_f


整数の場合、特別なメソッド(アクションなど) .to_f 、それらをその場で浮動小数点数に変換します。 逆のアクション(整数部への丸め)は、 .to_iメソッドによって実行されます。

OOPについて少し


最後のストローで、私たちはまだPLOから逃げることができたという事実について話しました。 実際、私は不誠実でした-Rubyで操作するものはすべてオブジェクトです。 すべて! これにより、言語が、値を返さないプリミティブ型およびフレーズがあるC ++およびJavaと区別されます。

他のオブジェクト指向コードと同様に、Rubyでコードを記述する場合、コード内のプロセス全体を繰り返すのではなく、主にモデルを作成します。 たとえば、料理の本用のアプリを作成する必要がある場合、ほとんどの場合、レシピのリストを作成する必要があります。 モデリングの場合、いくつかの並べ替え方法を使用して、さまざまな種類のデータを再現し、各リスト内の必要なデータの位置を同期する必要があります。 OOPは、必要なコンポーネントをモデル化するためのクラスとオブジェクトを作成するよう招待することにより、作業を容易にします。 この例では、小文字の属性と作成 、および成分の配列の形式の属性を持つRecipesクラスを作成できます。 クラスの目的は、プログラムのあらゆるものをモデル化することです。 クラスはプロトタイプであり、プロジェクト内の「名詞」の描画です: オブジェクト 。 クラスのインスタンスまたはオブジェクト(交換可能な用語)は、これらのプロトタイプを取得して実行します。 この例では、リスト内のレシピごとにオブジェクトを作成できます。これは、 Recipesクラスのインスタンスになります。このクラスには、データが含まれ、レシピに関連する処理が行われます(たとえば、材料のリストを保持し、このリストに材料を追加するなど) )レシピの整合性を監視します(たとえば、材料の量に数字だけがある、各レシピに名前を付けるなど)-オブジェクトに対するこれらすべてのアクション、「動詞」はメソッドです。

このドロップの始まりに戻りましょう。 はい、確かに、任意の数も本格的なオブジェクトです。 例の4.times {puts "Ruby"}番号4-オブジェクトはIntegerクラスのインスタンスであり(コードでこれを宣言せず、Rubyが代わりに行います)、 timesメソッドが適用され、クラスに登録されます(再びこれを行います)表示されませんが、暗示されています)。 さらに、式x = 1 + xユニットはオブジェクトであり、 +はそのメソッドです! したがって、OOPの原理を知らなくても、私たちはすでに気づかずに、オブジェクト指向プログラミングの「犠牲者」になりました:)

十分-ドロップは大きく、大きかったので、RubyでのOOPの実装を真剣に進めるために必要なすべてのものが得られました。

いつものように、私はあなたのコメント、フィードバック、コメントを楽しみにしています!

私は4番目のドロップで少し逃しました、そして、それは他の記事の下に埋められました-しかし、それはそこにあります; ここに!

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


All Articles