Ruby/Łańcuchy znakowe: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Szymon wro (dyskusja | edycje)
Linia 13:
 
<pre>
irb(main):001:0> puts "a\nb\nc"
a
b
c
=> nil
rubyirb(main):002:0> puts 'a\nb\nnc'
a\nb\nc
=> nil
rubyirb(main):003:0> "\n"
=> "\n"
rubyirb(main):004:0> '\n'
=> "\\n"
rubyirb(main):005:0> "\001"
=> "\001"
rubyirb(main):006:0> '\001'
=> "\\001"
rubyirb(main):007:0> "abcd #{5*3} efg"
=> "abcd 15 efg"
rubyirb(main):008:0> var = " abc "
=> " abc "
rubyirb(main):009:0> "1234#{var}5678"
=> "1234 abc 5678"
</pre>
 
Linia 40:
 
<pre>
rubyirb(main):001:0> "foo" + "bar"
=> "foobar"
rubyirb(main):002:0> "foo" * 2
=> "foofoo"
</pre>
 
Konkatenacja łańcuchów w C jest bardziej kłopotliwa z powodu konieczności bezpośredniego zarządzania pamięcią:
 
<source lang="c">
<pre>
char *s = malloc(strlen(s1)+strlen(s2)+1);
strcpy(s, s1);
Linia 54:
/* ... */
free(s);
</presource>
 
W Rubim natomiast, nie musimy w ogóle zastanawiać się nad miejscem zajmowanym w pamięci przez łańcuch. Jesteśmy wolni od jakiegokolwiek zarządzania pamięcią.
Linia 62:
Konkatenacja:
 
<source lang="ruby">
<pre>
ruby> slowo = "fo" + "o" #=> "foo"
</source>
"foo"
</pre>
 
Powtórzenie:
 
<source lang="ruby">
<pre>
ruby> slowo = slowo * 2 #=> "foofoo"
</source>
"foofoo"
</pre>
 
Ekstrahowanie znaków (zauważ, że znaki w Rubim są liczbami całkowitymi):
 
<source lang="ruby">
<pre>
ruby> slowo[0] #=> 102
102 # 102 jest kodem ASCII znaku `f'
ruby> slowo[-1] #=> 111
111 # 111 jest kodem ASCII znaku `o'
</presource>
 
(Wartości ujemne oznaczają liczbę znaków od końca łańcucha.)
Linia 87 ⟶ 85:
Ekstrahowanie podłańcuchów:
 
<source lang="ruby">
<pre>
ruby> warzywo = "pietruszka"
warzywo[0,1] #=> "p"
"pietruszka"
ruby> warzywo[0-2,12] #=> "ka"
warzywo[0..3] #=> "piet"
"p"
warzywo[-5..-2] #=> "uszk"
ruby> herb[-2,2]
</source>
"ka"
ruby> herb[0..3]
"piet"
ruby> herb[-5..-2]
"uszk"
</pre>
 
Sprawdzanie równości:
 
<source lang="ruby">
<pre>
ruby> "foo" == "foo" #=> true
ruby> "foo" == "bar" #=> false
true
</source>
ruby> "foo" == "bar"
false
</pre>
 
Zróbmy użytek z kilku tych cech. TaOto łamigłówka tozgadywanka "co to za słowo", ale być może słowo "łamigłówkazgadywanka" to zbyt dużo dla następującegotego kodu. ;-)
 
<source lang="ruby">
<pre>
# zapisz to jako zgadnij.rb
slowa = ['fiolek', 'roza', 'bez']
Linia 128 ⟶ 119:
end
puts "Chodzilo o ", sekret, "."
</presource>
 
Na razie nie przejmuj się za bardzo szczegółami powyższego kodu. Oto jak wygląda uruchomiona łamigłówka.
Linia 142 ⟶ 133:
</pre>
 
(PowinnoMogło minam pójść nieco lepiej biorąc pod uwagę, że szansa na trafienie wynosi 1/3.)
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Proste przykłady|poprz=Proste przykłady|nastart=Ruby/Wyrażenia regularne|nast=Wyrażenia regularne}}