Skip to content

Convenzioni di codice

Queste convenzioni valgono per ogni script Waze della community svizzera: sia il contributo al Helper sia uno script standalone. Due principi: restare conforme all'SDK ufficiale e scrivere codice pensato per essere letto prima di essere eseguito.

Specifico per il Helper

Le meccaniche concrete di changelog e i18n qui sotto descrivono il repository del Helper. Sul tuo script, mantieni il principio e adatta l'implementazione.

Conformità all'SDK WME

Ogni interazione con l'editor passa dall'SDK ufficiale, tipizzato tramite wme-sdk-typings.

  • Consultare la documentazione dell'SDK prima di implementare una funzionalità WME.
  • Non inventare API: se manca un'informazione nei typings o nella documentazione, segnalarlo invece di indovinare.
  • Non chiamare i global «pre-SDK» deprecati: non sono più disponibili.
  • Non reimplementare ciò che un pacchetto npm consolidato fornisce già.
  • Nessun hack del DOM che aggiri gli eventi dell'SDK.

Scrivere per cervelli umani

Il codice è letto da cervelli umani la cui memoria di lavoro contiene ~4 elementi. Ottimizzare per il carico cognitivo, non per le prestazioni della macchina.

Condizioni leggibili

Estrarre le espressioni complesse in variabili intermedie con nomi descrittivi.

typescript
// Male: sovraccarico cognitivo
if (val > someConstant && (condition2 || condition3) && condition4 && !condition5) {
  // il lettore è esausto
}

// Bene: memoria di lavoro liberata
const isValid = val > someConstant;
const isAllowed = condition2 || condition3;
const isSecure = condition4 && !condition5;

if (isValid && isAllowed && isSecure) {
  // il lettore si concentra sull'intenzione
}

Early return invece di if annidati

Trattare prima i casi limite, lasciare solo il percorso nominale.

typescript
// Bene
function process(data) {
  if (!data) return;
  if (!data.isValid) return;
  if (!data.hasPermission) return;

  // percorso nominale al primo livello
}

Altre regole

  • Commenti «perché», non «cosa»: spiegare la motivazione o una logica non ovvia, non parafrasare il codice.
  • Moduli profondi anziché superficiali: un'interfaccia semplice su un'implementazione ricca, non il contrario. Evitare strati di astrazione inutili.
  • Composizione anziché ereditarietà: non costringere il lettore a inseguire il comportamento tra più classi.
  • Funzionalità minime del linguaggio: leggere il codice non deve richiedere un livello esperto di TS/JS.
  • Valori auto-descrittivi: costanti esplicite anziché mapping da memorizzare.
  • Non abusare del DRY: un po' di duplicazione è meglio di un accoppiamento prematuro.
  • Evitare strati eccessivi: saltare tra troppi piccoli metodi/classi è faticoso; la lettura lineare è più naturale.

Traduzioni (i18n)

Ogni stringa visibile aggiunta deve essere inserita in locales/<lang>/common.json per tutte e quattro le lingue (de, en, fr, it), collegate tramite i18next. Una stringa presente in una sola lingua rompe la parità.

Changelog

Documentare ogni modifica nel formato Keep a Changelog (versionamento semantico, categorie Added / Changed / Deprecated / Removed / Fixed / Security).

Importante

Il changelog vive nella sezione Changelog di tutti i file README (README.md, README.fr.md, README.de.md, README.it.md); aggiornare ogni lingua. Mai creare un file CHANGELOG.md separato.

Dati svizzeri

La provenienza dei dati resta swisstopo. Aggiungendo o estendendo un livello, citare la fonte nel codice e nel testo di attribuzione.

Déjouons le trafic, ensembleGemeinsam dem Verkehr entfliehenSuperiamo il traffico, tutti assiemeOutsmarting traffic, together

Waze Community Svizzera · Documentazione comunitaria, non affiliata a Waze/Google