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!
## Öröklődés, polimorfizmus
## Öröklődés, polimorfizmus, like-olás generic
- Nem lesz altípusos 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
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"!
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
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 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
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
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é?
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ő?