Lernolibro pri Rubeno/Novaj nomoj por malnovaj objektoj
Novaj nomoj por malnovaj objektoj
redaktiRubeno 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
redaktiCertiĝ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
redaktiMemorfiksu, 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
redaktiRuby 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
redaktiRuby 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?
Sekvanta paĝo: Variabloj
Antaŭa paĝo: Ĉenoj