Skip to content

Commit 46ac178

Browse files
committed
remove some procedure syntax
1 parent ea70460 commit 46ac178

File tree

8 files changed

+38
-39
lines changed

8 files changed

+38
-39
lines changed

_ba/tour/inner-classes.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Radi ilustracije razlike, prikazaćemo implementaciju klase grafa:
2121
class Graph {
2222
class Node {
2323
var connectedNodes: List[Node] = Nil
24-
def connectTo(node: Node) {
24+
def connectTo(node: Node): Unit = {
2525
if (!connectedNodes.exists(node.equals)) {
2626
connectedNodes = node :: connectedNodes
2727
}
@@ -35,7 +35,7 @@ class Graph {
3535
}
3636
}
3737
```
38-
38+
3939
U našem programu, grafovi su predstavljeni listom čvorova (`List[Node]`).
4040
Svaki čvor ima listu drugih čvorova s kojima je povezan (`connectedNodes`). Klasa `Node` je _path-dependent tip_ jer je ugniježdena u klasi `Graph`. Stoga, svi čvorovi u `connectedNodes` moraju biti kreirani koristeći `newNode` iz iste instance klase `Graph`.
4141

@@ -47,13 +47,13 @@ val node3: graph1.Node = graph1.newNode
4747
node1.connectTo(node2)
4848
node3.connectTo(node1)
4949
```
50-
50+
5151
Eksplicitno smo deklarisali tip `node1`, `node2`, i `node3` kao `graph1.Node` zbog jasnosti ali ga je kompajler mogao sam zaključiti. Pošto kada pozivamo `graph1.newNode` koja poziva `new Node`, metoda koristi instancu `Node` specifičnu instanci `graph1`.
5252

5353
Da imamo dva grafa, sistem tipova Scale ne dozvoljava miješanje čvorova definisanih u različitim grafovima,
5454
jer čvorovi različitih grafova imaju različit tip.
5555
Ovo je primjer netačnog programa:
56-
56+
5757
```scala mdoc:fail
5858
val graph1: Graph = new Graph
5959
val node1: graph1.Node = graph1.newNode
@@ -69,7 +69,7 @@ U Javi bi zadnja linija prethodnog primjera bila tačna.
6969
Za čvorove oba grafa, Java bi dodijelila isti tip `Graph.Node`; npr. `Node` bi imala prefiks klase `Graph`.
7070
U Scali takav tip je također moguće izraziti, piše se kao `Graph#Node`.
7171
Ako želimo povezati čvorove različitih grafova, moramo promijeniti definiciju naše inicijalne implementacije grafa:
72-
72+
7373
```scala mdoc:nest
7474
class Graph {
7575
class Node {
@@ -88,6 +88,6 @@ class Graph {
8888
}
8989
}
9090
```
91-
91+
9292
> Primijetite da ovaj program ne dozvoljava da dodamo čvor u dva različita grafa.
9393
Ako bi htjeli ukloniti i ovo ograničenje, moramo promijeniti tipski parametar `nodes` u `Graph#Node`.

_es/tour/inner-classes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ En Scala es posible que las clases tengan como miembro otras clases. A diferenci
1515
class Graph {
1616
class Node {
1717
var connectedNodes: List[Node] = Nil
18-
def connectTo(node: Node) {
18+
def connectTo(node: Node): Unit = {
1919
if (!connectedNodes.exists(node.equals)) {
2020
connectedNodes = node :: connectedNodes
2121
}

_ja/tour/inner-classes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Javaのような、内部クラスが外側のクラスのメンバーとなる
1919
class Graph {
2020
class Node {
2121
var connectedNodes: List[Node] = Nil
22-
def connectTo(node: Node) {
22+
def connectTo(node: Node): Unit = {
2323
if (!connectedNodes.exists(node.equals)) {
2424
connectedNodes = node :: connectedNodes
2525
}

_ko/tour/inner-classes.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ previous-page: lower-type-bounds
1111
---
1212

1313
스칼라의 클래스는 다른 클래스를 멤버로 가질 수 있다. 자바와 같은 언어의 내부 클래스는 자신을 감싸고 있는 클래스의 멤버인 반면에, 스칼라에선 내부 클래스가 외부 객체의 경계 안에 있다. 이런 차이점을 분명히 하기 위해 그래프 데이터타입의 구현을 간단히 그려보자.
14-
14+
1515
class Graph {
1616
class Node {
1717
var connectedNodes: List[Node] = Nil
18-
def connectTo(node: Node) {
18+
def connectTo(node: Node): Unit = {
1919
if (!connectedNodes.exists(node.equals)) {
2020
connectedNodes = node :: connectedNodes
2121
}
@@ -28,9 +28,9 @@ previous-page: lower-type-bounds
2828
res
2929
}
3030
}
31-
31+
3232
이 프로그램에선 노드의 리스트로 그래프를 나타냈다. 노드는 내부 클래스 `Node`의 객체다. 각 노드는 리스트 `connectedNodes`에 저장되는 이웃의 목록을 갖고 있다. 이제 몇몇 노드를 선택하고 이에 연결된 노드를 추가하면서 점진적으로 그래프를 구축할 수 있다.
33-
33+
3434
object GraphTest extends App {
3535
val g = new Graph
3636
val n1 = g.newNode
@@ -39,9 +39,9 @@ previous-page: lower-type-bounds
3939
n1.connectTo(n2)
4040
n3.connectTo(n1)
4141
}
42-
42+
4343
정의된 여러 엔티티의 타입이 무엇인지 명시적으로 알려주는 타입 정보를 사용해 위의 예제를 확장해보자.
44-
44+
4545
object GraphTest extends App {
4646
val g: Graph = new Graph
4747
val n1: g.Node = g.newNode
@@ -50,10 +50,10 @@ previous-page: lower-type-bounds
5050
n1.connectTo(n2)
5151
n3.connectTo(n1)
5252
}
53-
53+
5454
이 코드는 외부 인스턴스(이 예제의 객체 `g`)를 접두어로 지정해 노드 타입을 분명히 나타내고 있다. 두 그래프가 있는 상황에서, 스칼라의 타입 시스템은 한 그래프에 정의된 노드를 다른 그래프에서도 정의해 공유하는 상황을 허용하지 않는다. 이는 다른 그래프의 노드는 다른 타입을 갖기 때문이다.
5555
다음은 잘못된 프로그램이다.
56-
56+
5757
object IllegalGraphTest extends App {
5858
val g: Graph = new Graph
5959
val n1: g.Node = g.newNode
@@ -63,9 +63,9 @@ previous-page: lower-type-bounds
6363
val n3: h.Node = h.newNode
6464
n1.connectTo(n3) // illegal!
6565
}
66-
66+
6767
자바에선 이 예제 프로그램의 마지막 줄이 올바른 표현임을 상기하자. 자바는 두 그래프의 노드에 `Graph.Node`라는 동일한 타입을 할당한다. 즉, `Node`에는 클래스 `Graph`가 접두어로 붙는다. 스칼라에서도 이런 타입을 표현할 수 있으며, 이를 `Graph#Node`로 나타낸다. 서로 다른 그래프 간에 노드를 연결할 수 있길 원한다면 초기 그래프 구현의 정의를 다음과 같이 변경해야 한다.
68-
68+
6969
class Graph {
7070
class Node {
7171
var connectedNodes: List[Graph#Node] = Nil
@@ -82,7 +82,7 @@ previous-page: lower-type-bounds
8282
res
8383
}
8484
}
85-
85+
8686
> 이 프로그램에선 하나의 노드를 서로 다른 두 그래프에 추가할 수 없음에 주의하자. 이 제약도 함께 제거하기 위해선 변수 nodes의 타입을 `Graph#Node`로 바꿔야 한다.
8787
8888
윤창석, 이한욱 옮김

_pl/tour/inner-classes.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ previous-page: lower-type-bounds
1010
---
1111

1212
W Scali możliwe jest zdefiniowanie klasy jako element innej klasy. W przeciwieństwie do języków takich jak Java, gdzie tego typu wewnętrzne klasy są elementami ujmujących ich klas, w Scali są one związane z zewnętrznym obiektem. Aby zademonstrować tę różnicę, stworzymy teraz prostą implementację grafu:
13-
13+
1414
```scala mdoc
1515
class Graph {
1616
class Node {
1717
var connectedNodes: List[Node] = Nil
18-
def connectTo(node: Node) {
18+
def connectTo(node: Node): Unit = {
1919
if (!connectedNodes.exists(node.equals)) {
2020
connectedNodes = node :: connectedNodes
2121
}
@@ -29,9 +29,9 @@ class Graph {
2929
}
3030
}
3131
```
32-
32+
3333
W naszym programie grafy są reprezentowane przez listę wierzchołków. Wierzchołki są obiektami klasy wewnętrznej `Node`. Każdy wierzchołek zawiera listę sąsiadów, które są przechowywane w liście `connectedNodes`. Możemy teraz skonfigurować graf z kilkoma wierzchołkami i połączyć je ze sobą:
34-
34+
3535
```scala mdoc
3636
object GraphTest extends App {
3737
val g = new Graph
@@ -42,9 +42,9 @@ object GraphTest extends App {
4242
n3.connectTo(n1)
4343
}
4444
```
45-
45+
4646
Teraz wzbogacimy nasz przykład o jawne typowanie, aby można było zobaczyć powiązanie typów wierzchołków z grafem:
47-
47+
4848
```scala mdoc:nest
4949
object GraphTest extends App {
5050
val g: Graph = new Graph
@@ -55,11 +55,11 @@ object GraphTest extends App {
5555
n3.connectTo(n1)
5656
}
5757
```
58-
58+
5959
Ten kod pokazuje, że typ wierzchołka jest prefiksowany przez swoją zewnętrzną instancję (która jest obiektem `g` w naszym przykładzie). Jeżeli mielibyśmy dwa grafy, system typów w Scali nie pozwoli nam na pomieszanie wierzchołków jednego z wierzchołkami drugiego, ponieważ wierzchołki drugiego grafu są określone przez inny typ.
6060

6161
Przykład niedopuszczalnego programu:
62-
62+
6363
```scala mdoc:fail
6464
object IllegalGraphTest extends App {
6565
val g: Graph = new Graph
@@ -71,9 +71,9 @@ object IllegalGraphTest extends App {
7171
n1.connectTo(n3) // niedopuszczalne!
7272
}
7373
```
74-
74+
7575
Warto zwrócić uwagę na to, że ostatnia linia poprzedniego przykładu byłaby poprawnym programem w Javie. Dla wierzchołków obu grafów Java przypisałaby ten sam typ `Graph.Node`. W Scali także istnieje możliwość wyrażenia takiego typu, zapisując go w formie: `Graph#Node`. Jeżeli byśmy chcieli połączyć wierzchołki różnych grafów, musielibyśmy wtedy zmienić definicję implementacji naszego grafu w następujący sposób:
76-
76+
7777
```scala mdoc:nest
7878
class Graph {
7979
class Node {
@@ -92,5 +92,5 @@ class Graph {
9292
}
9393
}
9494
```
95-
95+
9696
> Ważne jest, że ten program nie pozwala nam na dołączenie wierzchołka do dwóch różnych grafów. Jeżeli chcielibyśmy znieść to ograniczenie, należy zmienić typ zmiennej `nodes` na `Graph#Node`.

_pt-br/tour/inner-classes.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Em Scala é possível declarar classes que tenham outras classes como membros. E
1515
class Graph {
1616
class Node {
1717
var connectedNodes: List[Node] = Nil
18-
def connectTo(node: Node) {
18+
def connectTo(node: Node): Unit = {
1919
if (!connectedNodes.exists(node.equals)) {
2020
connectedNodes = node :: connectedNodes
2121
}
@@ -31,7 +31,7 @@ class Graph {
3131
```
3232

3333
Em nosso programa, os grafos são representados por uma lista de nós. Os nós são objetos da classe interna `Node`. Cada nó tem uma lista de vizinhos, que são armazenados na lista `connectedNodes`. Agora podemos configurar um grafo com alguns nós e conectar os nós de forma incremental:
34-
34+
3535
```scala mdoc
3636
object GraphTest extends App {
3737
val g = new Graph
@@ -44,7 +44,7 @@ object GraphTest extends App {
4444
```
4545

4646
Agora melhoramos o exemplo acima com tipos, para assim declarar explicitamente qual o tipo das várias entidades definidas:
47-
47+
4848
```scala mdoc:nest
4949
object GraphTest extends App {
5050
val g: Graph = new Graph
@@ -58,7 +58,7 @@ object GraphTest extends App {
5858

5959
Este código mostra claramente que o tipo nó é prefixado com sua instância externa (em nosso exemplo é o objeto `g`). Se agora temos dois grafos, o sistema de tipos de Scala não nos permite misturar nós definidos dentro de um grafo com os nós de outro, já que os nós do outro grafo têm um tipo diferente.
6060
Aqui está um programa inválido:
61-
61+
6262
```scala mdoc:fail
6363
object IllegalGraphTest extends App {
6464
val g: Graph = new Graph
@@ -72,7 +72,7 @@ object IllegalGraphTest extends App {
7272
```
7373

7474
Observe que em Java a última linha no programa do exemplo anterior é válida. Para nós de ambos os grafos, Java atribuiria o mesmo tipo `Graph.Node`; isto é, `Node` é prefixado com a classe `Graph`. Em Scala, esse tipo também pode ser expresso, e é escrito `Graph#Node`. Se quisermos ser capazes de conectar nós de diferentes grafos, temos que mudar a definição inicial da nossa implementação do grafo da seguinte maneira:
75-
75+
7676
```scala mdoc:nest
7777
class Graph {
7878
class Node {

_ru/tour/inner-classes.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ next-page: abstract-type-members
88
previous-page: lower-type-bounds
99
---
1010

11-
В Scala классам можно иметь в качестве членов другие классы. В отличие от Java-подобных языков, где такие внутренние классы являются членами окружающего класса, в Scala такие внутренние классы привязаны к содержащему его объекту. Предположим, мы хотим, чтобы компилятор не позволял нам на этапе компиляции смешивать узлы этого графа. Для решения этой задачи нам подойдут типы, зависящие от своего расположения.
11+
В Scala классам можно иметь в качестве членов другие классы. В отличие от Java-подобных языков, где такие внутренние классы являются членами окружающего класса, в Scala такие внутренние классы привязаны к содержащему его объекту. Предположим, мы хотим, чтобы компилятор не позволял нам на этапе компиляции смешивать узлы этого графа. Для решения этой задачи нам подойдут типы, зависящие от своего расположения.
1212

1313
Чтобы проиллюстрировать суть подхода, мы быстро набросаем реализацию такого графа:
1414

1515
```scala mdoc
1616
class Graph {
1717
class Node {
1818
var connectedNodes: List[Node] = Nil
19-
def connectTo(node: Node) {
19+
def connectTo(node: Node): Unit = {
2020
if (!connectedNodes.exists(node.equals)) {
2121
connectedNodes = node :: connectedNodes
2222
}

_zh-cn/tour/inner-classes.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ previous-page: lower-type-bounds
1919
class Graph {
2020
class Node {
2121
var connectedNodes: List[Node] = Nil
22-
def connectTo(node: Node) {
22+
def connectTo(node: Node): Unit = {
2323
if (!connectedNodes.exists(node.equals)) {
2424
connectedNodes = node :: connectedNodes
2525
}
@@ -77,4 +77,3 @@ class Graph {
7777
}
7878
}
7979
```
80-

0 commit comments

Comments
 (0)