usings from odin in the docs as idea to stole maybe

This commit is contained in:
Richard Thier 2024-10-11 10:14:37 +02:00
parent a40b035d64
commit 5c6c62c12a

View File

@ -613,7 +613,7 @@ Ez jó kérdés, hogy legyen-e. A rust-os match statement-nek azért vannak elő
^^Szerintem a "checked switch" jellegű dolgok első körben elegek lesznek? Sőt a checked legyen szerintem a default! ^^Szerintem a "checked switch" jellegű dolgok első körben elegek lesznek? Sőt a checked legyen szerintem a default!
## Öröklődés, polimorfizmus ## Öröklődés, polimorfizmus, like-olás generic
- Nem lesz altípusos polimorfizmus. - Nem lesz altípusos polimorfizmus.
- Lesz generic / template jellegű fordítási idejű polimorfizmus - Lesz generic / template jellegű fordítási idejű polimorfizmus
@ -625,6 +625,8 @@ Lennének ugye a hagyományos típusok, olyankor ezek "konkrétumot" jelentenek.
nem valami dolog ami az "int-ből öröklődik". De ez igaz a konkrétság a nyelvben ugye így öröklődés hiányában igaz lenne a saját nem valami dolog ami az "int-ből öröklődik". De ez igaz a konkrétság a nyelvben ugye így öröklődés hiányában igaz lenne a saját
handle típusokra is (a struct-ok okosabb neve itt a handle). handle típusokra is (a struct-ok okosabb neve itt a handle).
### Like-olásos generic polimorfizmus
Ellenben megadhatjuk egy típusnak, hogy egy-egy mezője (annak típusa alapján) "legyen a mi típusunk más típusú 'nézete' ott"! Ellenben megadhatjuk egy típusnak, hogy egy-egy mezője (annak típusa alapján) "legyen a mi típusunk más típusú 'nézete' ott"!
Például: Például:
@ -678,6 +680,41 @@ Még fontos azt is látni, hogy ilyen "int-like" vagy "MyHandleType-like" típus
pedig csak definícióban / implementációnál! Tehát NEM lehet csinálni int-like arr[]; tömböt - csak mondjuk A arr[]; tömböt, de ez pedig csak definícióban / implementációnál! Tehát NEM lehet csinálni int-like arr[]; tömböt - csak mondjuk A arr[]; tömböt, de ez
utóbbit viszont át lehet adni paraméterként a sort(..) függvénynek így! utóbbit viszont át lehet adni paraméterként a sort(..) függvénynek így!
### Odin-szerű "using"-ok
Lásd:
https://odin-lang.org/docs/overview/#using-statement-with-structs
Ez szerintem hasonló a like-oláshoz - érdemes elgondolkozni, hogy legyen-e(odin kód alább):
Vector3 :: struct{x, y, z: f32}
Entity :: struct {
position: Vector3,
orientation: quaternion128,
}
foo :: proc(using entity: ^Entity) {
fmt.println(position.x, position.y, position.z)
}
foo :: proc(entity: ^Entity) {
using entity.position
fmt.println(x, y, z)
}
A like-olás másik formájával analóg dolog meg ez a rész(odin kód alább):
Entity :: struct {
using position: Vector3,
orientation: quaternion128,
}
foo :: proc(entity: ^Entity) {
fmt.println(entity.x, entity.y, entity.z)
}
Igazából szerintem lehet mindkettő, nagyon jó poszt-OOP tool mindkettő.
## Tagged union ## Tagged union
tagged union AB { tagged union AB {
@ -809,7 +846,7 @@ FONTOS: Talán érdemes volna kötelezővé tenni, hogy minden "esetnek" legyen
leírt függvény esetén neked kelljen magadnak switch-case-elned a történetet (és az fusson le). Ezzel egy adott függvénynek vagy leírt függvény esetén neked kelljen magadnak switch-case-elned a történetet (és az fusson le). Ezzel egy adott függvénynek vagy
minden esetre kell legyen definíciója, vagy az únió eseteitől függetlenül álljon ott - de runtime error-t nem szeretnék! minden esetre kell legyen definíciója, vagy az únió eseteitől függetlenül álljon ott - de runtime error-t nem szeretnék!
## Interfészek ### Interfészek
Zsolt vetette fel, hogy neki azért öröm töltené el a szívét, ha lehetne egy "kicsit OO style" azért annyiban, hogy egy tömbben tud Zsolt vetette fel, hogy neki azért öröm töltené el a szívét, ha lehetne egy "kicsit OO style" azért annyiban, hogy egy tömbben tud
keverni különböző típusú dolgokat, amiknek közös az interfésze és kapni ilyeneket függvény paraméterként... keverni különböző típusú dolgokat, amiknek közös az interfésze és kapni ilyeneket függvény paraméterként...
@ -832,7 +869,7 @@ Megj.: A második változat (tagged union-os megoldás) kell szerintem + lehesse
ott, hogy IGameObject-like és interfész "like-olása" mindig ezt jelentené? ott, hogy IGameObject-like és interfész "like-olása" mindig ezt jelentené?
FONTOS: Adattagnak így nem lehet "interfész" típusa, csak tagged union-os esetben ugyebár... FONTOS: Adattagnak így nem lehet "interfész" típusa, csak tagged union-os esetben ugyebár...
## Láthatóság ### Láthatóság
TODO: Egyszeűsítendő? TODO: Egyszeűsítendő?