typescript - Kedy je vhodné použiť bodkočiarku?
Viem, že JavaScript (a teda aj TypeScript) podporuje vynechávanie bodkoviek v mnohých prípadoch. Napriek tomu chcem pridávať bodky, aby to bolo jednoznačné, ako sa odporúča v TypeScript Deep Dive.
Avšak nemôžem nájsť príručku, ktorá by uvádzala, kde použiť bodkočiarku. Napríklad pozrite sa na nasledujúci kód
class Person {
private name: string; // A
constructor(name: string) {
this.name = name;
}; // B
public add = () => {
return "C";
}; // C
}; // D
Som si celkom istý, že na A sa má použiť bodkočiarka. Ale čo B, C, D a všetky ostatné prípady, ktoré nie sú pokryté mojím príkladom?
Nepýtam sa, kde vynechať bodkočiarku, ale kde ich pridať. Odpoveď typu vždy moje potreby nesplní, pretože nemôžem pridať ; za public. Chcem vedieť, kde presne umiestniť bodkočiarku.
Odpoveď č. 1
Len pred každý riadok začínajúci na [, ( alebo ` dajte bodkočiarku a ste (takmer) hotoví*
Použitie toho istého príkladu ako v inej odpovedi:
var x = { xx : "hello", yy : "world"}
(function () {
console.log("Hello World");
})();
Mali by sme druhý riadok predponovať bodkočiarkou:
var x = { xx : "hello", yy : "world"}
;(function () {
inak si JavaScript myslí, že sa pokúšame call( nejakú funkciu, alebo reference[ nejaké pole. Toto je jednoduchšie, ľahšie sledovateľné a vizuálne jednoduchšie si to všimnúť. Tiež potrebujete bodkočiarky v for cykloch, ale metóda .forEach je čistejšia a jednoduchšia metóda. S istotou by som povedal, že toto jedno pravidlo pokrýva 99% scenárov, kde potrebujete použiť bodkočiarku v JavaScripte/TypeScripte.
Podľa tejto metódy je dôležité spájať nový riadok s ukončením príkazu.
*Toto vracia váženú hodnotu undefined:
return
7
Po návrate je nový riadok a prehliadač vloží bodkočiarku, čím ukončí príkaz takto:
return; // this will return undefined.
7
Urob to namiesto toho:
return (
7
)
JavaScript je vlastne dosť inteligentný s bodkočiarkami, je tu otvorená zátvorka, takže sa bodkočiarka nevloží, kým sa nenájde zatváracia zátvorka.
Ak máte zvyk dávať bodkočiarky všade a neviete presne, kedy sú potrebné, môžete si prečítať toto niekoľkostránkové vysvetlenie: http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding
Priznávam, že väčšina ľudí bude stále len rozhadzovať čiarky na konci každého riadku, ale ak ste nový a práve sa učíte, toto je lepší prístup.
Ak používate TypeScript (dúfajme, že áno, je rok 2023), a zabudnete bodkočiarku, pri použití môjho prvého príkladu dostanete túto chybu:
Odpoveď č. 2
Rovnako ako niektoré iné moderné jazyky odvodené od syntaxe C, syntax JavaScriptu bola navrhnutá tak, aby umožňovala vynechať bodkočiarky takmer vo všetkých situáciách. Povedal by som, používajte ich vždy alebo nikdy*. Aby ste ich používali „nikdy“, stručne povedané, každý príkaz je na novom riadku a nikdy nezačínajte riadok s (, [ alebo `.
Avšak, ak ich chcete používať „nikdy“, určite by ste mali používať linter, ako je JavaScript Standard Style alebo eslint s jeho vstavaným pravidlom semi na vypnutie bodkočiarky a pravidlom no-unexpected-multiline, ktoré zabezpečí, že sa vyhnete niekoľkým nástrahám, ako je nasledujúce:
a = b + c
(d + e).foo()
Vyššie uvedené sa interpretuje ako a=b + c(d + e).foo(); Všimnite si, že dodržiavaním vyššie uvedeného pravidla a nezačínaním riadka s ( sa tejto situácii predchádza.
Ďalším bežným príkladom je nasledovné:
return
{
hello: "world"
};
Na prvý pohľad by si človek mohol myslieť, že to bude interpretované ako vrátenie objektu, ale vlastne sa to interpretuje ako return; a kód definujúci objekt za príkazom return je nedosiahnuteľný. Opäť, dodržiavaním pravidla nezačínať riadok s { sa tomu predchádza.
- *Dobre, dobre, nie nikdy, ale takmer nikdy.
Odpoveď č. 3
TL;DR: Vždy
Majte na pamäti: radšej byť opatrný ako ľutovať
Pravdepodobne by ste ich mali používať vždy. Nemusíte ich umiestňovať v poradí, aby TypeScript fungoval, ale týmto spôsobom sa vyhnete chybám. ASI (Automatické vkladanie bodkočiarky) väčšinu času funguje celkom dobre, ale nie vždy. Naozaj chcete naraziť na problém len preto, že ste nepoužili bodkočiarku a stále prehliadate túto chybu? (V závislosti od vášho IDE môže byť chyba skutočne zachytená). Ale zvážte toto úplne platný JavaScript.
var x = { xx : "hello", yy : "world"}
(function () {
console.log("Hello World");
})();
Toto je platný javascript (a teda platný typescript). Tento kód však skutočne spôsobí chybu. Uncaught TypeError: (intermediate value)(intermediate value) is not a function(…).
Čomu by sa dalo vyhnúť jednoducho umiestnením bodkočiarky za prvý riadok. Tam ju nepotrebujete, a keby ďalší riadok nebol tým funkčným riadkom, pravdepodobne by to fungovalo správne. Ale chcete podstúpiť toto riziko? Mne sa zdá, že podstupovať riziko chýb kvôli jednému extra znaku nie je stojí za to. Plus, po čase si jednoducho zvyknete dávať bodkočiarky na koniec riadku tak či tak;
Myslite na svojich kolegov
Ďalším dôvodom, prečo by ste ich mohli chcieť používať celý čas, je prípad, keď sa mení kód. Váš kolega bude možno musieť zmeniť váš kód - a pri tom si myslí, že ASI bude fungovať aj s jeho zmenou kódu. Predstavte si, že to tak nie je a že jeho zmena skutočne spôsobí, že ASI bude robiť niečo nesprávne. Stojí to naozaj za tú bolesť hlavy pre vášho kolegu? Ak zmení dostatok vášho kódu a potom sa náhle stretne s množstvom chýb, môže byť dosť zmätený, ak nevie presne, ako ASI funguje. Môžete potenciálnemu kolegovi ušetriť značné množstvo (nepotrebnej) práce tým, že ich jednoducho dáte všade.
Odpoveď č. 4
Musíte dávať pozor, aby ste neúmyselne nepridali bodkočiarky, ale najlepší spôsob, ako sa vyhnúť tomuto sebou spôsobenému chybovému problému, je ich nepoužívať, okrem prípadov, keď ich jazyk vyžaduje.
Táto chyba je rovnako pravdepodobná ako ten jediný prípad, keď vynechanie bodkočiarky nemusí zachytiť váš skutočný zámer:
for(int i=0; i < count; i++); do()
Existuje jedna situácia, kde môže byť váš úmysel nejednoznačný, pri nezvyčajnom štýle začínania riadku znakom ( alebo [, pretože v takom prípade nový riadok ukončenie príkazu neprináša. Vo väčšine prípadov je to presne to, čo chcete, je zrejmé, keď to tak nie je, a môžete si predstaviť niektoré príkazy s bodkočiarkou alebo bez nej (ako som ukázal vyššie), ktoré sú problémové.
Nepoviem, že je iracionálne používať bodkočiarky, pretože je to tak zakorenené v kultúre, ale prosím ignorujte iracionálny strach, ktorý sa mnohí snažia podporiť zložitou a nepresnou diskusiou o ASI alebo šialeným mávaním rukami. Je to číra dogma, priatelia.
