Lernolibro pri Rubeno/Novaj nomoj por malnovaj objektoj
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 nomo | Rubena 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:
Objekto | Klaso |
---|---|
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.).
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?
Klavu tion:
12 + 12 '12' + '12' '12'.to_i + 12 '12' + 12.to_s 12 * 12 '12' * 12
Ĉu vi ricevis supozitan rezulton?
Kiel vi komprenigos la diferencon inter 12, '12' and 12.0 al via plijuna frato?
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 | |
---|---|---|
De | En | |
String#to_i | string | integer |
String#to_f | string | float |
Float#to_i | float | integer |
Float#to_s | float | string |
Integer#to_f | integer | float |
Integer#to_s | integer | string |
Ekzemploj:
[redakti]<img src="objects/01.gif" />
Ekzercoj
[redakti]Sekvanta paĝo: Variabloj
Antaŭa paĝo: Ĉenoj