Skip to content

Commit d9293e6

Browse files
authored
Merge pull request #1197 from kamilduda/pl/tour-of-scala
Update Polish translation for Tour of Scala
2 parents e8ca5da + 7a2822f commit d9293e6

7 files changed

+475
-50
lines changed

_pl/tour/basics.md

Lines changed: 342 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,350 @@
11
---
22
layout: tour
3-
title: Basics
3+
title: Podstawy
44

55
discourse: false
66

77
partof: scala-tour
8+
9+
num: 2
810
language: pl
11+
next-page: unified-types
12+
previous-page: tour-of-scala
913
---
14+
15+
Na tej stronie omówimy podstawy języka Scala.
16+
17+
## Uruchamianie Scali w przeglądarce
18+
19+
Dzięki ScalaFiddle możesz uruchomić Scalę w swojej przeglądarce.
20+
21+
1. Przejdź do [https://scalafiddle.io](https://scalafiddle.io).
22+
2. Wklej kod `println("Hello, world!")` w polu po lewej stronie.
23+
3. Naciśnij przycisk "Run". W panelu po prawej stronie pojawi się wynik działania programu.
24+
25+
Jest to prosta i niewymagająca żadnej instalacji metoda do eksperymentowania z kodem w Scali.
26+
27+
Wiele przykładów kodu w tym przewodniku jest również zintegrowana ze ScalaFiddle,
28+
dzięki czemu można je wypróbować wciskając po prostu przycisk "Run".
29+
30+
## Wyrażenia
31+
32+
Wyrażenia są rezultatem ewaluacji fragmentów kodu.
33+
34+
```
35+
1 + 1
36+
```
37+
38+
Wyniki wyrażeń można wyświetlić za pomocą funkcji `println`.
39+
40+
{% scalafiddle %}
41+
```tut
42+
println(1) // 1
43+
println(1 + 1) // 2
44+
println("Hello!") // Hello!
45+
println("Hello," + " world!") // Hello, world!
46+
```
47+
{% endscalafiddle %}
48+
49+
### Wartości
50+
51+
Rezultaty wyrażeń mogą zostać nazwane za pomocą słowa kluczowego `val`.
52+
53+
```tut
54+
val x = 1 + 1
55+
println(x) // 2
56+
```
57+
58+
Nazwane wyniki, tak jak `x` w ww. przykładzie, to wartości.
59+
Odniesienie się do wartości nie powoduje jej ponownego obliczenia.
60+
61+
Wartości nie można przypisać ponownie.
62+
63+
```tut:fail
64+
x = 3 // Nie kompiluje się.
65+
```
66+
67+
Typy wartości mogą być wywnioskowane przez kompilator, ale można również wyraźnie określić type:
68+
69+
```tut
70+
val x: Int = 1 + 1
71+
```
72+
73+
Zauważ, że deklaracja `Int` pojawia po identyfikatorze `x`, potrzebny jest rówmież dwukropek `:`.
74+
75+
### Zmienne
76+
77+
Zmienne są podobne do wartości, ale z tym wyjątkiem, że można je ponownie przypisywać.
78+
Zmienną można zdefiniować używając słowa kluczowego `var`.
79+
80+
{% scalafiddle %}
81+
```tut
82+
var x = 1 + 1
83+
x = 3 // Kompiluje się, ponieważ "x" jest zdefiniowane z użyciem "var".
84+
println(x * x) // 9
85+
```
86+
{% endscalafiddle %}
87+
88+
Tak jak przy wartościach, można wyraźnie zdefiniować żądany typ:
89+
90+
```tut
91+
var x: Int = 1 + 1
92+
```
93+
94+
## Wyrażenia blokowe
95+
96+
Wyrażenia mogą być łączone poprzez zamknięcie ich w nawiasie klamrowym`{}`.
97+
Taką konstrukcję nazywamy blokiem.
98+
Wynikiem całego bloku kodu jest wynik ostatniego wyrażenia w tym bloku.
99+
100+
{% scalafiddle %}
101+
```tut
102+
println({
103+
val x = 1 + 1
104+
x + 1
105+
}) // 3
106+
```
107+
{% endscalafiddle %}
108+
109+
## Funkcje
110+
111+
Funkcje to wyrażenia, które przyjmują pewne parametry.
112+
113+
Poniżej zdefiniowana jest funkcja anonimowa (nieposiadająca nazwy), która zwraca liczbę całkowitą przekazaną jako parametr, zwiększoną o 1.
114+
115+
```tut
116+
(x: Int) => x + 1
117+
```
118+
119+
Po lewej stronie od `=>` znajduje się lista parametrów.
120+
Po prawej stronie - wyrażenie wykorzystujące te parametry.
121+
122+
Funkcje można również nazywać.
123+
124+
{% scalafiddle %}
125+
```tut
126+
val addOne = (x: Int) => x + 1
127+
println(addOne(1)) // 2
128+
```
129+
{% endscalafiddle %}
130+
131+
Funkcje mogą przyjmować wiele parametrów.
132+
133+
{% scalafiddle %}
134+
```tut
135+
val add = (x: Int, y: Int) => x + y
136+
println(add(1, 2)) // 3
137+
```
138+
{% endscalafiddle %}
139+
140+
Mogą też wcale nie mieć parametrow.
141+
142+
{% scalafiddle %}
143+
```tut
144+
val getTheAnswer = () => 42
145+
println(getTheAnswer()) // 42
146+
```
147+
{% endscalafiddle %}
148+
149+
## Metody
150+
151+
Metody wyglądają i zachowują się bardzo podobnie jak funkcje, jednak jest między nimi kilka kluczowych różnic.
152+
153+
Metody są definiowane z użyciem słowa kluczowego `def`.
154+
Po `def` następuje nazwa metody, lista parametrów, zwracany typ i ciało metody.
155+
156+
{% scalafiddle %}
157+
```tut
158+
def add(x: Int, y: Int): Int = x + y
159+
println(add(1, 2)) // 3
160+
```
161+
{% endscalafiddle %}
162+
163+
Zauważ, że zwracany typ jest zadeklarowany _po_ liście parametrów i dwukropku `: Int`.
164+
165+
Metody mogą mieć wiele list parametrów.
166+
167+
{% scalafiddle %}
168+
```tut
169+
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier
170+
println(addThenMultiply(1, 2)(3)) // 9
171+
```
172+
{% endscalafiddle %}
173+
174+
Mogą również wcale ich nie posiadać.
175+
176+
{% scalafiddle %}
177+
```tut
178+
def name: String = System.getProperty("user.name")
179+
println("Hello, " + name + "!")
180+
```
181+
{% endscalafiddle %}
182+
183+
Od funkcji odróżnia je jeszcze kilka innych rzeczy, ale na razie możesz o nich myśleć jak o bardzo podobnych do funkcji.
184+
185+
Metody mogą zawierać również wyrażenia wielowierszowe.
186+
187+
```tut
188+
def getSquareString(input: Double): String = {
189+
val square = input * input
190+
square.toString
191+
}
192+
```
193+
194+
Ostatnie wyrażenie w ciele metody jest wartością, jaką zwraca cała metoda.
195+
Scala posiada słowo kluczowe `return`, ale jest ono wykorzystywane bardzo rzadko.
196+
197+
## Klasy
198+
199+
Klasy są definiowane za pomocą słowa kluczowego `class`, po którym następuje nazwa klasy i parametry konstruktora.
200+
201+
{% scalafiddle %}
202+
```tut
203+
class Greeter(prefix: String, suffix: String) {
204+
def greet(name: String): Unit =
205+
println(prefix + name + suffix)
206+
}
207+
```
208+
209+
Metoda `greet` zwraca typ `Unit` - oznacza to, że nie ma nic znaczącego do zwrócenia.
210+
`Unit` jest używany podobnie jak `void` w językach Java i C.
211+
Różnica polega na tym, że w Scali każde wyrażenie musi zwracać jakąś wartosć, tak naprawdę istnieje [obiekt singleton](singleton-objects.html) typu `Unit` - nie niesie on ze sobą żadnej znaczącej informacji.
212+
213+
Nowe instancje klasy tworzy się za pomocą słowa kluczowego `new`.
214+
215+
```tut
216+
val greeter = new Greeter("Hello, ", "!")
217+
greeter.greet("Scala developer") // Hello, Scala developer!
218+
```
219+
{% endscalafiddle %}
220+
221+
Klasy zostaną szerzej omówione w [dalszej części](classes.html) tego przewodnika.
222+
223+
## Klasy przypadku (case classes)
224+
225+
W Scali istnieje spacjalny typ klasy - klasa "przypadku" (case class).
226+
Klasy przypadku są domyślnie niezmienne i porównywane przez wartości.
227+
Klasy te można definiować używająć słów kluczowych `case class`.
228+
229+
{% scalafiddle %}
230+
```tut
231+
case class Point(x: Int, y: Int)
232+
```
233+
234+
Do utworzenia nowej instacji klasy przypadku nie jest konieczne używanie słowa kluczowego `new`.
235+
236+
```tut
237+
val point = Point(1, 2)
238+
val anotherPoint = Point(1, 2)
239+
val yetAnotherPoint = Point(2, 2)
240+
```
241+
242+
Są one porównywane przez wartości - _nie_ przez referencje.
243+
244+
```tut
245+
if (point == anotherPoint) {
246+
println(point + " i " + anotherPoint + " są jednakowe.")
247+
} else {
248+
println(point + " i " + anotherPoint + " są inne.")
249+
} // Point(1,2) i Point(1,2) są jednakowe.
250+
251+
if (point == yetAnotherPoint) {
252+
println(point + " i " + yetAnotherPoint + " są jednakowe.")
253+
} else {
254+
println(point + " i " + yetAnotherPoint + " są inne.")
255+
} // Point(1,2) i Point(2,2) są inne.
256+
```
257+
{% endscalafiddle %}
258+
259+
Klasy przypadków to dużo szerszy temat, do zapoznania z którym bardzo zachęcamy. Jesteśmy pewni, że Ci się spodoba!
260+
Jest on dokładnie omówiony w [późniejszym rozdziale](case-classes.html).
261+
262+
## Obiekty
263+
264+
Obiekty to pojedyncze wystąpienia ich definicji.
265+
Można o nich myśleć jak o instancjach ich własnych klas - singletonach.
266+
267+
Objekty definiuje się z użyciem słowa kluczowego `object`.
268+
269+
{% scalafiddle %}
270+
```tut
271+
object IdFactory {
272+
private var counter = 0
273+
def create(): Int = {
274+
counter += 1
275+
counter
276+
}
277+
}
278+
```
279+
280+
Aby uzyskać dostęp do obiektu używa się jego nazwy.
281+
282+
```tut
283+
val newId: Int = IdFactory.create()
284+
println(newId) // 1
285+
val newerId: Int = IdFactory.create()
286+
println(newerId) // 2
287+
```
288+
{% endscalafiddle %}
289+
290+
Obiekty zostaną szerzej omówione [później](singleton-objects.html).
291+
292+
## Cechy (traits)
293+
294+
Cechy to typy zawierające pewne pola i metody.
295+
Wiele cech może być łączonych.
296+
297+
Cechę (trait) można zdefiniować używając słowa kluczowego `trait`.
298+
299+
```tut
300+
trait Greeter {
301+
def greet(name: String): Unit
302+
}
303+
```
304+
305+
Cechy mogą zawierać domyślną implementację.
306+
307+
{% scalafiddle %}
308+
```tut
309+
trait Greeter {
310+
def greet(name: String): Unit =
311+
println("Hello, " + name + "!")
312+
}
313+
```
314+
315+
Cechy można rozszerzać używając słowa kluczowego `extends` i nadpisać implementację z użyciem `override`.
316+
317+
```tut
318+
class DefaultGreeter extends Greeter
319+
320+
class CustomizableGreeter(prefix: String, postfix: String) extends Greeter {
321+
override def greet(name: String): Unit = {
322+
println(prefix + name + postfix)
323+
}
324+
}
325+
326+
val greeter = new DefaultGreeter()
327+
greeter.greet("Scala developer") // Hello, Scala developer!
328+
329+
val customGreeter = new CustomizableGreeter("How are you, ", "?")
330+
customGreeter.greet("Scala developer") // How are you, Scala developer?
331+
```
332+
{% endscalafiddle %}
333+
334+
W tym przykładzie `DefaultGreeter` rozszerza tylko jedną cechę (trait), ale równie dobrze może rozszerzać ich wiele.
335+
336+
Cechy zostały dokładniej opisane w jednym z [kolejnych](traits.html) rozdziałów.
337+
338+
## Metoda Main
339+
340+
Metoda `main` to punkt wejścia do programu.
341+
Maszyna Wirtalna Javy (Java Virtual Machine / JVM) wymaga, aby metoda ta nazywała się "main" i posiadała jeden arguemnt - tablicę ciągów znaków.
342+
343+
Z użyciem obiektu można zdefiniować metodę `main` w następujący sposób:
344+
345+
```tut
346+
object Main {
347+
def main(args: Array[String]): Unit =
348+
println("Hello, Scala developer!")
349+
}
350+
```

_pl/tour/mixin-class-composition.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ discourse: false
66

77
partof: scala-tour
88

9-
num: 5
9+
num: 6
1010
language: pl
1111
next-page: higher-order-functions
1212
previous-page: tuples

0 commit comments

Comments
 (0)