Lernolibro pri Rubeno/Novaj nomoj por malnovaj objektoj
El Vikilibroj
Enhavo |
[redakti] Novaj nomoj por malnovaj objektoj
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
[redakti] Klasoj kontraŭ objektoj
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) |
[redakti] Klaso#metodo notacio
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.
[redakti] Konvertado inter klasoj
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 [redakti] Ekzemploj:
<img src="objects/01.gif" />
[redakti] Ekzercoj
-
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 kpmprenigos diferenco inter 12, '12' and 12.0 al via plijuna frato?
Sekvanta paĝo: Variabloj
Antaŭa paĝo: Ĉenoj
-

