--- gitea: none include_toc: true --- [TOC] # Structures de données natives TODO + types de bases / array / object / Map / Set + conversions + Date / RegExp + == vs === + Math API + Manipuler URL => move 2 JS-DOM API + class + getter/setter + private/protected + interface + iterator / async inter / héritage + fonctionnement prototype (méthode => fct et inversement + bind) + + ts enum + commentaires / const / readonly / frozen + console/assert + opérateurs (vs Python + déstructuration / décomposition / gabarit / coalescence des nuls / chaînage opt + + dans les fonctions + Exceptions + structures conditionnelles + imports + fct async (#30) + fct génératrices + Deno API + # Fonctions ## Déclaration ```javascript // [JS] JavaScript function foo(arg1, arg2 = "2") { //... return 2.3; } foo(1) ``` ```python # [🐍] Python def foo(arg1, arg2 = "2", /): # les paramètres positionnel uniquement # ... return 2.3 foo(1) ``` ```typescript //[TS] TypeScript function foo(arg1: number, arg2?: string = "2"): number { // ... return 2.3; } foo(1) ``` ## Paramètre du reste (rest parameter) ```javascript // [JS] JavaScript function foo(arg1, ...arg2) { // arg2 = ["2", "3"] return 2.3; } foo(1, "2", "3") ``` ```python # [🐍] Python def foo(arg1, /, *arg2): # arg2 = ("2", "3") return 2.3 foo(1, "2", "3") ``` ```typescript //[TS] TypeScript function foo(arg1: number, ...arg2: readonly string[]): number { // arg2 = ["2", "3"]     return 2.3; } foo(1, "2", "3") ``` ## Opérateur de décomposition (spread operator) comme argument ```javascript // [JS] JavaScript function foo(arg1, arg2, arg3) { //... return 2.3; } const args = ["2", "3"]; foo(1, ...args) ``` ```python # [🐍] Python def foo(arg1, arg2, arg3, /): # ... return 2.3 args = ("2", "3") foo(1, *args ) ``` ```typescript //[TS] TypeScript function foo(arg1: number, arg2: string, arg3: string): number { return 2.3; } const args = ["2", "3"] as const; // ou as ["string", "string"] foo(1, ...args) ``` ## Fonctions génératrices TODO: utilité ```javascript // [JS] JavaScript function * foo(nb) { for(let i = 0; i < nb; ++i) yield i; } for( let val of foo(5) ) console.log(val); ``` ```python # [🐍] Python def foo(nb, /) { for i in range(nb): yield i; } for val in foo(5) console.log(val); ``` ```typescript //[TS] TypeScript function * foo(nb: number): Generator { for(let i = 0; i < nb; ++i) yield i; } for(let val of foo(5) ) console.log(val); ``` ## Fonctions fléchées TODO: pas d'équivalent en python + utilité (callbacks) ```javascript const foo = arg => arg[0]; // est équivalent à : const foo = function(arg){ return arg[0]; } // si plusieurs paramètres, utiliser des parenthèses (). // si valeur retournée plus complexe, utiliser des accolades {}. const foo = (arg1, args) => { ... ; return x; } // est équivalent à : const foo = function(arg1, arg2){ ... ; return x; } ``` # Asynchronisme /!\ Diff with Python - Promise - motivation + pas bloquer thread principal