!bckdVuIloZOXRjKIXO:matrix.org

JavaScript in Jena

26 Members
MeatSpace treffen mit Leuten die gerne JavaScript programmieren | https://jena.js.org7 Servers

Load older messages


Timestamp Message
20 Jul 2019
09:43:27@tim:schumacher.imTimIst halt der klassische Debugger wie man es von anderen Sprachen auch kennt.
21 Jul 2019
18:49:31@gelight:matrix.orggelightNabend .... hab meinen Fehler gefunden. Allerdings ohne Debugger. :) Hatte einen Denkfehler im rekursivem Aufbau meines Object-Trees.
18:49:42@gelight:matrix.orggelightAber den Debugger teste ich dennoch nochmal :)
30 Jul 2019
20:12:00@tarvos90:matrix.orgtarvos90Kann mir jemand den Sinn von Generics näherbringen? Mir fallen keine Beispiele ein in denen ich unbedingt welche brauche. Hab mir mal das konstruiert: https://gist.github.com/TonySpegel/78129b3c567d118fbdcb2de9600b6c66
20:12:57@tarvos90:matrix.orgtarvos90wozu brauche ich denn das generische getDataFromResponse wenn ich auch an die Felder komme in denen ich Methoden schreibe die mir ein bestimmtes Interface zurückgeben
20:13:07@tarvos90:matrix.orgtarvos90checks irgendwie nicht :D
21:21:52@tarvos90:matrix.orgtarvos90 Okay vielleicht hab ich was verstanden, dadurch dass ich in API Response einen generischen Typ habe und außerdem als festen Typ status spare ich mir das wiederholen von Status in den anderen Interfaces und dadurch wird meine API schlanker
21:21:58@tarvos90:matrix.orgtarvos90Haut das so ungefähr hin
31 Jul 2019
06:25:35@joerg:alea.gnuu.deJörg Sommer

Also Generics haben im Allgemeinen den Vorteil, dass Du weniger Code schreiben musst. Mit Deiner generischen Funktion getDataFromResponse kannst Du jetzt sofort sagen

getDataFromResponse(fetchUser(id)).name
getDataFromResponse(fetchProduct(id)).price

Ohne Generics müsstest Du den Code zwei Varianten der Funktion hinschreiben oder im JavaScript-Sinn würde der Zugriff auf das Object erst zur Laufzeit geprüft.

06:43:11@tim:schumacher.imTim tarvos90 Jörg Sommer Gerade bei TypeScript gilt aber auch zu berücksichtigen das Generics ein reines Compile-Zeit feature ist. Im fertigen JavaScript Code fehlt von den Generics jede Spur weil das kein Sprach Feature ist.
06:44:47@tim:schumacher.imTim mt: Hier kannst du btw auch zu dur der XMPP-Bridge fragen stellen :-)
06:46:30@joerg:alea.gnuu.deJörg SommerNa ja, TypeScript ist ja auch nur so ein Gewurstel, das auf JavaScript aufsetzt, sprich man schreibt Code, der dann in JavaScript übersetzt wird, der dann ausgeführt wird.
06:48:37@tim:schumacher.imTim

tarvos90: Gerade wenn ich JSON von irgendwelchen APIs bekomme, würde ich meine Typen auch eher so definieren:

interface Product {
    id?: number;
    price?: number;
}

bzw

interface ApiResponse<Data> {
    status?: number;
    data?: Data;
}

Da bei JSON ja nicht garantiert ist, das die Daten wohl geformt sind. Der bessere Ansatz ist meiner Meininung nach sich eine Klasse User und da eine statische methode fromJSON reinzubauen die den Datensatz auch gleich validiert ob er wohl geformt ist und dann in eine Instanz von User umwandelt.

06:49:32@tim:schumacher.imTim
In reply to @joerg:alea.gnuu.de
Na ja, TypeScript ist ja auch nur so ein Gewurstel, das auf JavaScript aufsetzt, sprich man schreibt Code, der dann in JavaScript übersetzt wird, der dann ausgeführt wird.
Als gewurstel würde ich es jetzt nicht beschreiben. Sondern es ist eher ein Ansatz das was in JavaScript alles möglich ist, in ein statisch typisiertes Korsett zu zwängen.
06:57:47@joerg:alea.gnuu.deJörg SommerMir fällt es schwer, Beschränkungen als großen Vorteil zu erkennen. Bringt denn TypeScript neue Features mit?
06:59:21@joerg:alea.gnuu.deJörg SommerJava wurde den C++-Programmierern ja auch als Vorteil verkauft. Weil templates zu böse waren und Mehrfachvererbung keiner verstanden hat, war eine Sprache ohne besser. Und oh Wunder, nach Jahren hat man Templates dann doch eingebaut.
07:03:16@joerg:alea.gnuu.deJörg Sommer JavaScript ist (leider oder zum Glück) der Assembler des Webs. Wenn man etwas im Browser ausführen will, dann muss es in JavaScript sein. Genauso wie Hochsprachen wie Python am Ende den Assembler-Code nicht besser machen können, kann man mit allen Aufsätzen auf JavaScript an der darunterliegenden Ebene nichts verändern. Wenn das add den Zeiger über den Pufferrand hinaus schiebt, dann ist man draußen, genauso wie eben der Zugriff auf nicht definierte Felder eines Objekts die JavaScript-Semantik hat.
08:09:23@tarvos90:matrix.orgtarvos90 Jo das Beispiel war eh fiktiv und alle Felder optional zu machen hab ich mir auch gedacht. Aber danke für den Input hab's jetzt besser verstanden
08:21:19@mt:bau-ha.usmt
In reply to @tim:schumacher.im
mt: Hier kannst du btw auch zu dur der XMPP-Bridge fragen stellen :-)

hätte gleich mal eine frage (versuche immer noch den code zu verstehen):

public async reverseRegisterUser(username: string, protocol: PurpleProtocol): Promise<IPurpleAccount> { ...

die methoden-signatur gibt ein promise für einen IPurpleAccount zurück oder? d.h. das promise müsste ich dann beim aufruf behandeln (und auch die exceptions davon!?) aber welche rolle spielt jetzt das async?

08:23:40@tim:schumacher.imTim mt: Das ist ein neuer async/await Syntax. Im prinzip ist das nur ein Zuckermantel für Promises. Wenn du async in deiner Methoden signatur hast, must du Promises zurück geben.
08:25:40@tim:schumacher.imTim
async func1(): Promise<string> { return 'foo' }

async func2(): Promise<void> { const foo = await func1(); }

Mit dem await Schlüsselwort wird gewartet bis das Promise erfolgreich aufgelöst wurde. Wenn das Promise rejected wurde wird eine gewöhnliche Exception geschmissen.

08:28:22@mt:bau-ha.usmtah, das hängt also zusammen - danke - ich dache zuerst das async/await und promises zwei arten das umzusetzen sind, so macht alles auf einmal mehr sinn :)
08:29:30@mt:bau-ha.usmt also ich rufe diese immer mit await auf und kann das await z.b. in einen try / catch block werfen?
08:30:33* @mt:bau-ha.usmt sollte mal javascript lernen ;)
08:32:25@tim:schumacher.imTim

genau:

async function func3() {
    try {
        const foo = await func1();
        console.dir(foo);
    } catch(error) {
        console.dir(error);
    }
}
08:36:10@tim:schumacher.imTimMit async/await arbeitest du mit promises so wie mit normalem Code
08:36:22@tim:schumacher.imTimwas ich von der Ergonomie sehr gut finde
2 Aug 2019
03:45:12@gunna:matrix.org@gunna:matrix.org left the room.
25 Aug 2019
04:07:42@polviebolci3:matrix.org@polviebolci3:matrix.org joined the room.
04:07:50@polviebolci3:matrix.org@polviebolci3:matrix.org left the room.

There are no newer messages yet.


Back to Room List