2. Slova

Dakle, naučili smo ponešto o brojkama, ali šta je sa slovima, riječima, tekstom? Grupu znakova u jednom programu nazivamo skupnom oznakom „strings“ (znakovni niz). (Možete ih zamisliti kao slova štampanim na nekoj reklami.) Da jednostavnije objasnimo koji dio kod pripada stringu, bojićemo ih u crveno. Slijedi par primjera:

'Hello.'

'Ruby rocks.'

'5 is my favorite number... what is yours?'

'Snoopy says #%^?&*@! when he stubs his toe.'

' '

''

Kao što možete vidjeti, strings mogu imati ne samo slova nego i ostale znakove. Poslijednji primjer, u kome nema nikakvih znakova nazvali bismo praznim ili “empty string”.

Koristili smo naredbu „puts” za ispis brojeva, hajde da pokušamo isto i sa strings:

puts 'Hello, world!'

puts ''

puts 'Good-bye.'

Ispis bi izgledao ovako:

Hello, world!

Good-bye.

To je dobro ispalo. Pokušajte sami napisati nekoliko primjera, proizvoljno.

Aritmetika znakovnog niza (string)

Baš onako kako izvodimo aritmetičke operacije nad brojevima, moguće ih je izvoditi i nad slovima, odnosno znakovima (strings). Pa, dobro,...nekako već možemo dodati stringove jedne drugima. Hajde da pokušamo dodati jedan string drugome, pa da vidimo kakav će ispis na ekranu biti.

puts 'I like' + 'apple pie.'

Ispis:

I likeapple pie.

Opaaa! Zaboravih napraviti razmak između „I like” i „apple pie”. Razmaci uglavnom nisu toliko važni, generalno, ali su važni unutar stringa. (Istina je ono što pričaju: računari ne rade ono što mi od njih želimo da urade, nego ono što im kažemo/naredimo.) Hajde da pokušamo ponovo:

puts 'I like ' + 'apple pie.'

puts 'I like' + ' apple pie.'

Ispis:

I like apple pie.

I like apple pie.

(Kao što možete uočiti, nije važno kojem stringu sam dodao razmak.) Dakle, moguće je „adirati” znakove jedne drugima,

ali je takođe moguće i množiti ih! (Uvećati ih za neki broj puta). Vid' ovo:

puts 'blink ' * 4

Ispis:

batting her eyes (...ona trepće očima)

(Šalim se, ono što bi se na ekranu ispisalo je:)

blink blink blink blink

Savršeno je smislen ispis, ako malo razmislite. Uostalom, 7 * 3, znači jednostavno 7+7+7, tako da bi i 'moo'+3 značilo 'moo'+'moo'+'moo'.

12 protiv '12'

Prije nego krenemo dalje, treba se uvjeriti da razlikujemo brojeve i brojke kao znakove. 12 je broj kao numerička vrijednost, a '12' je string sastavljen od dva znaka – dvije brojke.

Hajde da se malo poigramo ovim razlikama:

puts 12 + 12

puts '12' + '12'

puts '12 + 12'

Ispis:

24

1212

12 + 12

A šta kažete na ovo:

puts 2 * 5

puts '2' * 5

puts '2 * 5'

Ispis:

10

22222

2 * 5

Ovi su primjeri prilično izravni. Međutim, ako niste pažljivi kako miješate string i brojeve, mogu se javiti i…

Problemi

Do ovog momenta je vjerovatno bilo stvari koje ste pokušali, pa nisu ispale kako treba. Ukoliko to nije bio slučaj, evo par primjera:

puts '12' + 12

puts '2' * '5'

#<TypeError: can't convert Fixnum into String>

Hmmm…u ispisu se pojavljuje poruka da je došlo do grješke. Problem je, ustvari, što ne možete sabrati broj (integer, float) i znakovni niz (string), ili pomnožiti dva znakovna niza (string).

Takve operacije nemaju smisla, kao što nemaju ni ove:

puts 'Betty' + 12

puts 'Fred' * 'John'

Postoji još nekoliko stvarčica na koje morate obratiti pažnju: možete u program napisati 'žaba' * 5, pošto to znači da će string 'žaba' biti umnožen pet puta. Međutim, ne možete napisati 5 * 'žaba', jer bi to značilo da je broj pet umnožen žaba puta,...što je baš smiješno [k.p.:...ili kako kod nas kažu: „ne idu babe i žabe“]. Konačno, šta ako želim da moj program napiše „You're swell“? Možemo pokušati ovako:

puts 'You're swell!'

Ali, to baš i neće ispasti dobro; nećemo čak ni pokušavati. Računar je pomislio da smo gotovi s pisanjem stringa. [k.p.: računar prepoznaje string kao onaj niz znakova koji je zatvoren između dva navoda ' *** ']. (Iz tog je razloga poželjno imati uređivač teksta koji će prikazivati obojenu sintaksu programskog jezika.) Kako onda da kažemo programskom jeziku kako treba da izgleda naš string? Moramo izbjeći prerano prekidanje navoda ovako:

puts 'You\'re swell!'

Ispis:

You're swell!

Kosa crta (nadesno) je rezervisani znak za izbjegavanje/poništavanje prekida navoda stringa. S druge strane, ako imate kosu crtu i neki drugi znak uz nju, onda su ti znakovi nekad prevedeni u sasvim novi znak. Jedino što kosa crta poništava su navodi i sama kosa crta. (Ako malo bolje rasmislite, znakovi za poništavanje uvijek bi morali poništavati sami sebe.) Slijedi nekoliko primjera:

puts 'You\'re swell!' puts 'backslash at the end of a string: \\'

puts 'up\\down'

puts 'up\down'

Ispis:

You're swell!

backslash at the end of a string: \

up\down

up\down

Pošto kosa crta ne poništava „d“ u riječi 'down', nego samu sebe, posljednja dva primjera su identična. Ne izgledaju isto u kodu, ali na vašem računaru su oni stvarno jednaki.

Ukoliko već sada imate nekih pitanja, nastavite čitati slijedeće poglavlje. Na ovoj stranici nisam mogao dati baš sve odgovore odjednom.

------------------------------------------------

© 2003-2009 Chris Pine

http://pine.fm/LearnToProgram/