Saltu al enhavo

Lernolibro pri Rubeno/Novaj nomoj por malnovaj objektoj

El Vikilibroj

Novaj nomoj por malnovaj objektoj

[redakti]

Rubeno uzas novajn nomojn por aĵoj, kiujn ni jam konas. Ekzemple, ĝi uzas vorton glit-punktaj nombroj (Float) por decimalaj frakcioj. Jen iom da difinoj:

  • Objekto: Iu peco de datumo (kiel nombro 3 aŭ ĉeno 'saluton').

  • Klaso: Rubeno dividas ĉion laŭ klasoj (kiel entjeroj (integers), glit-punktaĵoj (floats) kaj ĉenoj (strings)).

  • Metodo: Metodo estas ago, kiu vi povas fari kun objekto. Vi povas adicii entjeroj kune, tial + estas metodo.

Jen Rubenaj klasoj por aĵoj, kiujn vi jam konas:

Malnova nomoRubena klaso
integer Integer (entjero)
decimals Float (glitpunktaĵo)
text String (ĉeno)

Jen iom da aliaj metodoj:

Klaso Kelkaj metodoj
Integer (entjero) + - / * % **
Float (glitpunktaĵo - decimala frakcio) + - / * % **
String (ĉeno) capitalize, reverse,
length, upcase

capitalize = ĉef-liter-ig-u
reverse = revers-u
lenght = long-o
upcase = majuskl-ig-u


Klasoj kontraŭ objektoj

[redakti]

Certiĝu ke vi komprenas diferencon inter la klasoj kaj objektoj. Objekto estas peco de datumo. Klaso estas kvalito de la datumo.

Ekzemple, 3 kaj 5 estas diferencaj nombroj. Ili ne estas unu objekto. Sed tiuj nombroj estas entjeroj, tial ili apartenas al unu klaso. Jen aliaj ekzemploj:

ObjektoKlaso
   2 Integer (entjero)
-5 Integer (entjero)
7.2 Float (glitpunktaĵo)
3.14 Float (glitpunktaĵo)
'hello' String (ĉeno)
'world' String (ĉeno)


Klaso#metodo notacio

[redakti]

Memorfiksu, ke diversaj klasoj havas diversajn metodoj:

  • Divido (/) laboras ne egale kun entrejoj (integers) kaj glitpunktaĵoj (floats).
  • Adicio (+) laboras kun ĉenoj ne same, kiel ĝi laboras kun entrejoj.
  • Ĉenoj havas iom da diversajn metodojn, kiujn ne havas glitpunktaĵoj kaj entrejoj (kiel capitalize, length, upcase, ktp.).
  • Tial ni uzos notacion Klaso#metodo por esti certa pri metodo, kiun ni subkomprenas. Ekzemple mi skribos Integer#+ por diferencii ĝin de Float#+ kaj String#+. Mi povas diri ankaŭ, ke String#upcase ekzistas, sed Integer#upcase ne ekzistas.

    Konvertado inter klasoj

    [redakti]

    Ruby havas iom da metodojn por konverto inter klasoj:

    Metodo Konvertas
    DeEn
    String#to_i string integer
    String#to_f string float
    Float#to_i float integer
    Float#to_s float string
    Integer#to_fintegerfloat
    Integer#to_sintegerstring

    Ekzemploj:

    [redakti]

    <img src="objects/01.gif" />

    Ekzercoj

    [redakti]
    1. Ruby povas diri al vi, el kiu klaso estas objekto. Klavu tion en irb:

      
      12.is_a?(Integer)
      12.is_a?(Float)
      12.is_a?(String)
      
      '12'.is_a?(Integer)
      '12'.is_a?(Float)
      '12'.is_a?(String)
      
      12.0.is_a?(Integer)
      12.0.is_a?(Float)
      12.0.is_a?(String)
                             

      Kiujn difirencojn vi vidas?

    2. Klavu tion:

      
      12 + 12
      '12' + '12'
      
      '12'.to_i + 12
      '12' + 12.to_s
      
      12 * 12
      '12' * 12
                             

      Ĉu vi ricevis supozitan rezulton?

    3. Kiel vi komprenigos la diferencon inter 12, '12' and 12.0 al via plijuna frato?

    Sekvanta paĝo: Variabloj

    Antaŭa paĝo: Ĉenoj