Skip to content

Commit b4f232a

Browse files
committed
Update Polish translation for classes
Add tut:fail validation Remove tut check Fix typos Make more readable Update _pl/tour/classes.md Co-Authored-By: kamilduda <kamilduda01@gmail.com> Update _pl/tour/classes.md Co-Authored-By: kamilduda <kamilduda01@gmail.com>
1 parent d79f475 commit b4f232a

File tree

1 file changed

+95
-17
lines changed

1 file changed

+95
-17
lines changed

_pl/tour/classes.md

+95-17
Original file line numberDiff line numberDiff line change
@@ -6,49 +6,127 @@ discourse: false
66

77
partof: scala-tour
88

9-
num: 3
9+
num: 4
1010
language: pl
1111
next-page: traits
1212
previous-page: unified-types
1313
---
1414

15-
Klasy w Scali określają schemat obiektów podczas wykonania programu. Oto przykład definicji klasy `Point`:
15+
Klasy w Scali są wzorcami do tworzenia obiektów.
16+
Klasy mogą zawierać metody, wartości, zmienne, typy, obiekty, cechy i klasy; wszystkie one są nazywane składnikami klasy (_class members_).
17+
Typy, obiekty i cechy zostaną omówione w dalszej części przewodnika.
18+
19+
## Definiowanie klasy
20+
21+
Minimalna definicja klasy składa się ze słowa kluczowego `class` oraz jej identyfikatora.
22+
Nazwy klas powinny zaczynać się z wielkiej litery.
23+
24+
```tut
25+
class User
26+
27+
val user1 = new User
28+
```
29+
30+
Do tworzenia nowych instancji klasy służy słowo kluczowe `new`.
31+
Ponieważ żaden konstruktor nie został zdefiniowany, klasa `User` posiada konstruktor domyślny, który nie przyjmuje żadnych parametrów.
32+
Zazwyczaj jednak definiujemy konstruktor i ciało klasy.
33+
Poniższy przykład przedstawia definicję klasy służącej do reprezentowania punktu.
1634

1735
```tut
1836
class Point(var x: Int, var y: Int) {
37+
1938
def move(dx: Int, dy: Int): Unit = {
2039
x = x + dx
2140
y = y + dy
2241
}
42+
2343
override def toString: String =
24-
"(" + x + ", " + y + ")"
44+
s"($x, $y)"
2545
}
46+
47+
val point1 = new Point(2, 3)
48+
point1.x // 2
49+
println(point1) // wyświetla (2, 3)
50+
```
51+
52+
Klasa `Point` ma cztery składniki: zmienne `x` i `y` oraz metody `move` i `toString`.
53+
W przeciwieństwie do innych języków programowania, główny konstruktor zawiera się w sygnaturze klasy: `(var x: Int, var y: Int)`.
54+
Metoda `move` przyjmuje jako parametry dwie liczby całkowite i zwraca wartość `()` typu `Unit`, która nie niesie ze sobą żadnych informacji.
55+
Odpowiada to słowu kluczowemu `void` w językach Java - podobnych.
56+
Metoda `toString` nie przyjmuje żadnych parametrów, ale zwraca wartość typu `String`.
57+
Ponieważ `toString` nadpisuje metodę `toString` zdefiniowaną w [`AnyRef`](unified-types.html), jest ona dodatkowo oznaczona słowem kluczowym `override`.
58+
59+
## Konstruktory
60+
61+
Konstruktory mogą zawierać parametry opcjonalne - wystarczy dostarczyć wartość domyślną dla takiego parametru.
62+
63+
```tut
64+
class Point(var x: Int = 0, var y: Int = 0)
65+
66+
val origin = new Point // x i y są mają wartość 0
67+
val point1 = new Point(1)
68+
println(point1.x) // wyświetla 1
69+
2670
```
2771

28-
Klasy w Scali są sparametryzowane poprzez argumenty konstruktora. Powyższy kod wymaga podania dwóch argumentów konstruktora: `x` i `y`. Oba parametry są widoczne w zasięgu ciała klasy.
72+
W tej wersji klasy `Point`, `x` oraz `y` mają domyślną wartość `0` - dlatego nie jest wymagane przekazanie żadnych parametrów.
73+
Jednak z powodu tego, że konstruktor jest ewaluowany od lewej do prawej strony, jeżeli chcesz przekazać parametr tylko do argumentu `y`, musisz określić nazwę tego parametru.
74+
75+
```
76+
class Point(var x: Int = 0, var y: Int = 0)
77+
val point2 = new Point(y = 2)
78+
println(point2.y) // wyświetla 2
79+
```
2980

30-
Klasa `Point` zawiera także dwie metody: `move` i `toString`. `move` pobiera dwa argumenty w postaci liczb całkowitych, ale nie zwraca żadnej wartości (zwracany typ `Unit` odpowiada `void` w językach takich jak Java). Z drugiej strony `toString` nie wymaga żadnych parametrów, ale zwraca łańcuch znaków typu `String`. Ponieważ `toString` przesłania predefiniowaną metodę `toString`, jest ona oznaczona słowem kluczowym `override`.
81+
Jest to również dobra praktyka, która zwiększa przejrzystość kodu.
3182

32-
Należy dodać, że w Scali nie jest wymagane podanie słowa kluczowego `return` w celu zwrócenia wartości. Dzięki temu, że każdy blok kodu w Scali jest wyrażeniem, wartością zwracaną przez metodę jest ostatnie wyrażenie w ciele metody. Dodatkowo proste wyrażenia, takie jak zaprezentowane na przykładzie implementacji `toString` nie wymagają podania klamer, zatem można je umieścić bezpośrednio po definicji metody.
83+
## Prywatne składniki oraz składnia getterów i setterów
3384

34-
Instancje klasy można tworzyć w następujący sposób:
85+
Domyślnie wszystkie składniki klasy są publiczne.
86+
Aby ukryć je przed zewnętrznymi klientami (wszystkim co jest poza daną klasą), należy użyć słowa kluczowego `private`.
3587

3688
```tut
37-
object Classes {
38-
def main(args: Array[String]) {
39-
val pt = new Point(1, 2)
40-
println(pt)
41-
pt.move(10, 10)
42-
println(pt)
89+
class Point {
90+
private var _x = 0
91+
private var _y = 0
92+
private val bound = 100
93+
94+
def x = _x
95+
def x_= (newValue: Int): Unit = {
96+
if (newValue < bound) _x = newValue else printWarning
4397
}
98+
99+
def y = _y
100+
def y_= (newValue: Int): Unit = {
101+
if (newValue < bound) _y = newValue else printWarning
102+
}
103+
104+
private def printWarning = println("UWAGA: wartość poza przedziałem")
44105
}
106+
107+
val point1 = new Point
108+
point1.x = 99
109+
point1.y = 101 // wyświetla ostrzeżenie
45110
```
46111

47-
Program definiuje wykonywalną aplikację w postaci [obiektu singleton](singleton-objects.html) z główną metodą `main`. Metoda `main` tworzy nową instancję typu `Point` i zapisuje ją do wartości `pt`. Istotną rzeczą jest to, że wartości zdefiniowane z użyciem słowa kluczowego `val` różnią się od zmiennych określonych przez `var` (jak w klasie `Point` powyżej) tym, że nie dopuszczają aktualizacji ich wartości.
112+
W powyższym przykładnie klasy `Point` dane przechowywane są w prywatnych zmiennych `_x` i `_y`.
113+
Publiczne metody `def x` i `def y` istnieją w celu uzyskania dostępu do prywatnych danych - są to gettery.
114+
Metody `def x_=` i `def y_=` (settery) służą do walidacji oraz ustawiania wartości zmiennych `_x` i `_y`.
115+
Zwróć uwagę na specyficzną składnię dla setterów: posiadają one `_=` dołączone do nazwy, dopiero w dalszej kolejności zdefiniowane są ich parametry.
116+
117+
Parametry głównego konstruktora oznaczone przez `val` i `var` są publiczne.
118+
Ponieważ `val` jest niezmienne, poniższy kod nie jest prawidłowy
119+
120+
```
121+
class Point(val x: Int, val y: Int)
122+
val point = new Point(1, 2)
123+
point.x = 3 // <-- nie kompiluje się
124+
```
48125

49-
Wynik działania programu:
126+
Parametry konstruktora __nie__ zawierające `val` lub `var` są prywatne - widoczne jedynie we wnętrzu klasy.
50127

51128
```
52-
(1, 2)
53-
(11, 12)
129+
class Point(x: Int, y: Int)
130+
val point = new Point(1, 2)
131+
point.x // <-- nie kompiluje się
54132
```

0 commit comments

Comments
 (0)