Skip to content

Commit 4163806

Browse files
committed
Add Polish translation for Traits page
1 parent 9591ae3 commit 4163806

File tree

1 file changed

+67
-31
lines changed

1 file changed

+67
-31
lines changed

_pl/tour/traits.md

Lines changed: 67 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,52 +6,88 @@ discourse: false
66

77
partof: scala-tour
88

9-
num: 4
9+
num: 5
1010
language: pl
1111
next-page: tuples
1212
previous-page: classes
1313
---
1414

15-
Zbliżone do interfejsów Javy cechy są wykorzystywane do definiowania typów obiektów poprzez określenie sygnatur wspieranych metod. Podobnie jak w Javie 8, Scala pozwala cechom na częściową implementację, tzn. jest możliwe podanie domyślnej implementacji dla niektórych metod. W przeciwieństwie do klas, cechy nie mogą posiadać parametrów konstruktora.
15+
Cechy (Traits) są używane, aby współdzielić interfejsy i pola pomiędzy klasami.
16+
Są bardzo podobne do interfejsów w Javie 8.
17+
Cechy mogą być rozszerzane przez klasy i obiekty, jednak nie można stworzyć instancji danej cechy.
18+
Z tego powodu cechy nie przyjmują parametrów wartości.
1619

17-
Przykład definicji cechy której zadaniem jest określanie podobieństwa z innym obiektem:
20+
## Definiowanie cechy
21+
22+
Minimalna definicja cechy składa się ze słowa kluczowego `trait` oraz identyfikatora.
23+
24+
```tut
25+
trait HairColor
26+
```
27+
28+
Cechy są szczególnie przydatne jako generyczne typy zawierające abstrakcyjne metody.
1829

1930
```tut
20-
trait Similarity {
21-
def isSimilar(x: Any): Boolean
22-
def isNotSimilar(x: Any): Boolean = !isSimilar(x)
31+
trait Iterator[A] {
32+
def hasNext: Boolean
33+
def next(): A
2334
}
2435
```
25-
26-
Powyższa cecha składa się z dwóch metod: `isSimilar` oraz `isNotSimilar`. Mimo że `isSimilar` nie posiada implementacji (odpowiada metodzie abstrakcyjnej w Javie), `isNotSimilar` definiuje konkretną implementację. W ten sposób klasy, które łączą tą cechę, muszą tylko zdefiniować implementacją dla metody `isSimilar`. Zachowanie `isNotSimilar` jest dziedziczone bezpośrednio z tej cechy. Cechy są zazwyczaj łączone z [klasami](classes.html) lub innymi cechami poprzez [kompozycję domieszek](mixin-class-composition.html):
36+
37+
Rozszerzenie cechy `trait Iterator[A]` wymaga wskazania parametru typu `A` oraz zaimplementowania metod `hasNext` i `next`.
38+
39+
## Używanie cech
40+
41+
Aby rozszerzyć cechę należy użyć słowa kluczowego `extends`.
42+
Następnie wymagane jest zaimplementowanie abstrakcyjnych składników danej cechy używając słowa kluczowego `override.`
2743

2844
```tut
29-
class Point(xc: Int, yc: Int) extends Similarity {
30-
var x: Int = xc
31-
var y: Int = yc
32-
def isSimilar(obj: Any) =
33-
obj.isInstanceOf[Point] &&
34-
obj.asInstanceOf[Point].x == x
45+
trait Iterator[A] {
46+
def hasNext: Boolean
47+
def next(): A
3548
}
3649
37-
object TraitsTest extends App {
38-
val p1 = new Point(2, 3)
39-
val p2 = new Point(2, 4)
40-
val p3 = new Point(3, 3)
41-
val p4 = new Point(2, 3)
42-
println(p1.isSimilar(p2))
43-
println(p1.isSimilar(p3))
44-
// Metoda isNotSimilar jest zdefiniowana w Similarity
45-
println(p1.isNotSimilar(2))
46-
println(p1.isNotSimilar(p4))
50+
class IntIterator(to: Int) extends Iterator[Int] {
51+
private var current = 0
52+
override def hasNext: Boolean = current < to
53+
override def next(): Int = {
54+
if (hasNext) {
55+
val t = current
56+
current += 1
57+
t
58+
} else 0
59+
}
4760
}
48-
```
49-
50-
Wynik działania programu:
5161
62+
val iterator = new IntIterator(10)
63+
iterator.next() // zwraca 0
64+
iterator.next() // zwraca 1
5265
```
53-
true
54-
false
55-
true
56-
false
66+
67+
Klasa `IntIterator` przyjmuje parametr `to` (do) jako ograniczenie górne, oraz rozszerza `extends Iterator[Int]` - co oznacza, że metoda `next` musi zwrócić wartość typu Int.
68+
69+
## Podtyp
70+
71+
Jeżeli w jakimś miejscu wymagana jest cecha pewnego typu, to zamiast niej można użyć jej podtypu.
72+
73+
```tut
74+
import scala.collection.mutable.ArrayBuffer
75+
76+
trait Pet {
77+
val name: String
78+
}
79+
80+
class Cat(val name: String) extends Pet
81+
class Dog(val name: String) extends Pet
82+
83+
val dog = new Dog("Harry")
84+
val cat = new Cat("Sally")
85+
86+
val animals = ArrayBuffer.empty[Pet]
87+
animals.append(dog)
88+
animals.append(cat)
89+
animals.foreach(pet => println(pet.name)) // Wyświetli Harry Sally
5790
```
91+
92+
Cecha `trait Pet` posiada abstrakcyjne pole `name`, które zostaje zaimplementowane przez klasy `Cat` i `Dog` w ich konstruktorach.
93+
W ostatnim wierszu wywołujemy `pet.name` musi być ono zaimplementowane przez każdy podtyp cechy `Pet`.

0 commit comments

Comments
 (0)