Kurzusok
/
Ruby
Ruby
/
Tanterv
/
Tartományok
Ta

Tartományok ebben a kurzusban: Ruby

1 feladat

A(z) Tartományok fogalomról

A tartományok két érték közötti intervallumot jelölnek. A leggyakoribb típusok, amelyek támogatják a tartományokat, az Integer és a String. Sok mindenre használhatók, például gyorsan létrehozhatsz velük egy gyűjteményt, szeletelhetsz karakterláncokat, ellenőrizheted, hogy egy érték benne van-e egy tartományban, és iterálhatsz velük. A .. vagy a ... tartományoperátorral hozod létre őket (előbbi a végértéket is magában foglalja, utóbbi nem).

1..5  # => 1..5
1...5 # => 1...5

(1..5).to_a # => [1, 2, 3, 4, 5]
(1...5).to_a # => [1, 2, 3, 4]

Azért van két tartományoperátor, hogy létrehozhass olyan tartományokat, amelyek magukban foglalják a végértéket, vagy épp nem, ami hasznos lehet például nulla alapú indexekkel való munka során.

Tartományokat a Range kezdőértékével is létrehozhatsz.

Range.new(1, 5) # A range containing 1, 2, 3, 4, 5
Note

Amikor Rubyban a .. vagy ... operátorral hozol létre egy tartományt, és metódust szeretnél meghívni rajta, zárójelbe kell tenned a tartományt. Ennek az az oka, hogy különben a metódus a tartományoperátor második argumentumán hívódna meg.

(1..5).sum # => 15
1..5.sum # => Error: undefined method `sum' for 5:Integer (NoMethodError)

Részstringek kinyerése

Amikor egy karakterláncot szeretnél szeletelni, a tartományoperátorral kinyerhetsz egy részstringet. Ehhez a részstring kezdő- és végindexével hozol létre egy tartományt.

"Hello World"[0..4] # => "Hello"
"Hello World"[6..10] # => "World"

Negatív indexekkel a karakterlánc végéről is kinyerheted a részstringet.

"Hello World"[-5..-1] # => "World"
"Hello World"[6..-4] # => "Wo"

Tartománymetódusok

A tartományoknak van egy sor metódusuk, amelyekkel dolgozhatsz velük. Ezekkel például kiszámolhatod a tartomány összes értékének összegét, vagy ellenőrizheted, hogy a tartomány tartalmaz-e egy értéket.

Metódus Leírás Példa
sum A tartomány összes értékének összegét adja vissza (1..5).sum # => 15
size A tartomány méretét adja vissza (1..5).size # => 5
include? true-t ad vissza, ha a tartomány tartalmazza a megadott értéket, egyébként false-t (1..5).include?(3) # => true

Végtelen és kezdet nélküli tartományok

A tartomány lehet végtelen és kezdet nélküli. A végtelen vagy kezdet nélküli tartomány kezdő- vagy végértéke nil, de a tartomány definiálásakor a nil elhagyható.

A kezdet nélküli és végtelen tartományok akkor hasznosak, ha például egy karakterláncot az elejétől vagy a végéig szeretnél szeletelni.

"Hello World"[0..] # => "Hello World"
"Hello World"[4..] # => "o World"
"Hello World"[..5] # => "Hello "
Caution

Ha nem egy gyűjteményen használod, a végtelen tartomány végtelen sorozatot eredményezhet, ha nem bánsz vele óvatosan.

Karakterlánc-tartományok

A karakterláncok is használhatók tartományokban, és lehetővé teszik, hogy két karakterlánc közötti intervallumot kapj. Bizonyos karakterláncok esetében a viselkedése kissé váratlan lehet, ezért óvatosan használd.

"aa".."az".to_a # => ["aa", "ab", "ac", ..., "az"]

Egyedi objektumok tartományokban

Advanced

A Ruby lehetővé teszi, hogy egyedi objektumokat használj tartományokban. Ehhez az objektumnak a következőket kell megvalósítania:

  • tartalmazza a Comparable modult
  • succ metódus
  • <=> metódus

Ezek a metódusok teszik lehetővé, hogy a tartomány végig tudjon iterálni az objektumon, és össze tudja hasonlítani a tartományban lévő objektumokat.

class Foo
  include Comparable

  attr_reader :value

  def initialize(value)
    @value = value
  end

  def succ
    Foo.new(value + 1)
  end

  def <=>(other)
    value <=> other.value
  end
end

(Foo.new(1)..Foo.new(5))
# => #<Foo:0x7f3552bebe70 @value=1>, #<Foo:0x7f3552bebe50 @value=2>, #<Foo:0x7f3552bebe40 @value=3>, #<Foo:0x7f3552bebe30 @value=4>, #<Foo:0x7f3552bebe20 @value=5>
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Tartományok fogalmat