Skip to content
This repository was archived by the owner on Feb 13, 2024. It is now read-only.

Commit 9b8344b

Browse files
authored
Merge pull request #7 from tothpeterdev/chapter2-fix
Chapter 2 fixes
2 parents 593d756 + cbfc689 commit 9b8344b

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

manuscript/chapter2.adoc

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
== Előkészítés
55

6-
Első lépésként hozzunk létre egy .NET Core C# konzolalkalmazást: a projektsablon szűrőben válasszuk a C# nyelv - Windows platform - _Console_ projekttípust. A szűrt listában válasszuk _Console App_ sablont (most már *ne* a .NET Framework-ös legyen). A neve legyen _HelloCSharp2_. A solutiont ne tegyük külön mappába (_Place solution and project in the same directory_ legyen bekapcsolva). A megcélzott framework verzió legyen .NET 6.
6+
Első lépésként hozzunk létre egy .NET Core C# konzolalkalmazást: a projektsablon szűrőben válasszuk a C# nyelv - Windows platform - _Console_ projekttípust. A szűrt listában válasszuk a _Console App_ sablont (most már *ne* a .NET Framework-ös legyen). A neve legyen _HelloCSharp2_. A solutiont ne tegyük külön mappába (_Place solution and project in the same directory_ legyen bekapcsolva). A megcélzott framework verzió legyen .NET 6.
77

88
=== Legfelső szintű utasítások, implicit globális névtér-hivatkozások
99

@@ -24,7 +24,7 @@ C# 10-ben a program belépési pontját adó forrásfájlt jelentősen lerövid
2424

2525
WARNING: Fontos észrevétel a fentiekből: ezen képesség nem változtatja meg a C# semmilyen alapvető jellemzőjét, például ugyanúgy minden függvénynek osztályon belül kell lennie. A fordítás során a legfelső szintű utasítások kódja úgy egészül ki, ami már minden szabálynak megfelel.
2626

27-
WARNING: A legfelső szintű kód olyan, amit a program más részéről nem tudunk hívni, hiszen nem is ismerjük a burkoló osztály nevét. Emiatt nincs értelme legfelső szintű kódban láthatósági beállításnak (`private`, `protcted`, stb.) vagy propertynek.
27+
WARNING: A legfelső szintű kód olyan, amit a program más részéről nem tudunk hívni, hiszen nem is ismerjük a burkoló osztály nevét. Emiatt nincs értelme legfelső szintű kódban láthatósági beállításnak (`private`, `protected` stb.) vagy propertynek.
2828

2929
Akadályozzuk meg a program azonnali lefutását egy blokkoló hívással.
3030

@@ -166,7 +166,7 @@ Tegyük fel, hogy egy kutyához bármilyen, üzleti logikában nem felhasznált
166166
----
167167
<1> A `new` operátor utáni konstruktorhívás sok esetben elhagyható, ha a bal oldal alapján amúgy is tudható a típus.
168168

169-
TIP: Az újabb projektsablonok sokkal kevesebb névtérdeklarációt (`using`) generálnak alapból. Ha kell vegyük fel a szükségeseket a fel nem oldott néven állva gyorsművelet (villanykörte) eszközzel (kbd:[CTRL+.])
169+
TIP: Az újabb projektsablonok sokkal kevesebb névtérdeklarációt (`using`) generálnak alapból. Ha kell, vegyük fel a szükségeseket a fel nem oldott néven állva a gyorsművelet (villanykörte) eszközzel (kbd:[CTRL+.])
170170

171171
Az objektum inicializáló és az index inicializáló vegyíthető, így az alábbi módon tudunk felvenni további tulajdonságokat a kutyákhoz a legfelső szintű kódba:
172172

@@ -191,7 +191,7 @@ var dogs = new Dictionary<string, Dog>
191191
["watson"] = watson,
192192
["unnamed"] = unnamed,
193193
["unknown"] = unknown,
194-
["pinmpedli"] = pimpedli
194+
["pimpedli"] = pimpedli
195195
};
196196
197197
foreach (var dog in dogs)
@@ -239,12 +239,11 @@ A szótár feltöltését megírhatjuk kollekció inicializációval is. Ehhez k
239239
----
240240
var dogs = new Dictionary<string, Dog>
241241
{
242-
{ nameof(banan), banan},
243-
{ nameof(watson), watson},
244-
{ nameof(unnamed), unnamed},
245-
{ nameof(unknown), unknown},
246-
{ nameof(pimpedli), pimpedli}
247-
242+
{ nameof(banan), banan },
243+
{ nameof(watson), watson },
244+
{ nameof(unnamed), unnamed },
245+
{ nameof(unknown), unknown },
246+
{ nameof(pimpedli), pimpedli }
248247
};
249248
----
250249

@@ -304,7 +303,7 @@ Ha így futtatjuk az alkalmazást, az `AgeInDays` és a származtatott tulajdons
304303

305304
== Rekord típus
306305

307-
A rekord típusok speciális típusok, melyek
306+
A rekord típusok speciális típusok, melyek:
308307

309308
- egyenlőségvizsgálat során érték típusokra jellemző logikát követnek, azaz két példány akkor egyenlő, ha adataik egyenlőek
310309
- könnyen immutábilissá tehetők, könnyen kezelhetők immutábilis típusként
@@ -385,7 +384,7 @@ A `DogRec` típus alapvetően immutábilis, a példányainak alapadatai iniciali
385384
[source,csharp]
386385
----
387386
/**/var watson3 = new DogRec(Guid.Empty, "Watson");
388-
/**/var watson4 = new DogRec(Guid.Empty, "Watson" , DateTime.Now.AddYears(-1));
387+
/**/var watson4 = new DogRec(Guid.Empty, "Watson", DateTime.Now.AddYears(-1));
389388
watson4.Name = watson3.Name + "_2"; //<= nem fordul
390389
----
391390

@@ -401,9 +400,9 @@ Ha immutábilis típusokkal dolgozunk, akkor mutáció helyett új példányt ho
401400
WriteLine(watson5);
402401
----
403402

404-
Futtatáskor a konzolban gyönyörködjünk a rekord típusok alapértelmezetten is olvasható szöveges kiírására.
403+
Futtatáskor a konzolban gyönyörködjünk a rekord típusok alapértelmezetten is olvasható szöveges kiírásában.
405404

406-
A másoló kifejezésben a `with` operátor előtt megadjuk melyik példányt klónoznánk, majd az *inicializáció részeként* milyen értékeket állítanánk át, ehhez az objektum inicializációs szintaxist használhatjuk. Fontos eszünkbe vésni, hogy a másolás eredményeként új példány jön létre, új memóriaterület foglalódik le. Gondoljunk erre akkor, amikor egy ciklusban használjuk ezt a módszert sok egymást követő módosításra.
405+
A másoló kifejezésben a `with` operátor előtt megadjuk, melyik példányt klónoznánk, majd az *inicializáció részeként* milyen értékeket állítanánk át, ehhez az objektum inicializációs szintaxist használhatjuk. Fontos eszünkbe vésni, hogy a másolás eredményeként új példány jön létre, új memóriaterület foglalódik le. Gondoljunk erre akkor, amikor egy ciklusban használjuk ezt a módszert sok egymást követő módosításra.
407406

408407
NOTE: Mire jó a rekord típus, az immutabilitás? Az immutábilis típussokkal való hatékony és eredményes munka másfajta, az imperatív nyelvekhez szokott fejlesztők számára szokatlan módszereket kíván. Vannak területek, ahol ez a befektetés megtérül, ilyen például a többszálú környezet. A legtöbb szálkezeléssel kapcsolatos probléma ugyanis a szálak által közösen használt adatstruktúrák mutációjára vezethető vissza (ún. _race condition_, versenyhelyzet). Nincs mutáció - nincs probléma. (_No mutation - no cry_)
409408

@@ -463,7 +462,7 @@ TIP: Immutábilis környezetben törekedjünk arra, hogy a *teljes* adatstruktú
463462

464463
=== Normál megadás
465464

466-
Ha nincs szükségünk a kikényszerített immutabilitásra, akkor használhatjuk a rekord normál megadását. Fogjuk az `Dog` osztályt, másoljuk le a kódját, adjunk neki más nevet és `class` helyett `record` jelölőt. A `Dog` osztály fölé:
465+
Ha nincs szükségünk a kikényszerített immutabilitásra, akkor használhatjuk a rekord normál megadását. Fogjuk a `Dog` osztályt, másoljuk le a kódját, adjunk neki más nevet és `class` helyett `record` jelölőt. A `Dog` osztály fölé:
467466

468467
[source,csharp]
469468
----

0 commit comments

Comments
 (0)