Thread View: pl.comp.lang.javascript
4 messages
4 total messages
Started by Piotrek
Wed, 15 Oct 2014 18:06
Automatyczne wstawianie średników - pytanie
Author: Piotrek
Date: Wed, 15 Oct 2014 18:06
Date: Wed, 15 Oct 2014 18:06
45 lines
2653 bytes
2653 bytes
W 6. edycji "JavaScript The Definitive Guide", w podrozdziale 2.5 (Optional Semicolons), znajduje się takie stwierdzenie: "JavaScript treats a line break as a semicolon if the next nonspace character cannot be interpreted as a continuation of the current statement", a zaraz pod nim podany jest taki przykład: var a a = 3 console.log(a) Autor twierdzi, że zostanie on zinterpretowany jako: var a; a = 3; console.log(a); tzn. pierwsza linia będzie niejawnie zakończona średnikiem, bo bez niego interpreter natrafiłby na niezrozumiały dla niego ciąg "var a a". Taka argumentacja nie przemawia do mnie z dwóch powodów: 1. Dlaczego niby 2 pierwsze linie miałyby być bez średnika zinterpretowane jako "var a a", a nie "var aa" (skąd miałaby się brać spacja między dwoma "a")? 2. Zgodnie z regułką zacytowaną przed przykładem, JavaScript traktuje koniec linii jako średnik jeśli pierwszy różny od spacji znak w nowej linii nie może być zinterpretowany jako kontynuacja bieżącej instrukcji (zakładam, że jest to równoważność, tzn. jeśli ten warunek nie zachodzi, średnik nie zostaje automatycznie dodany). Skoro tak, to dlaczego rozważany przykład nie jest rozumiany jako: var aa = 3; console.log(a); tzn. dlaczego 4 pierwsze linie nie mogą składać się łącznie na deklarację zmiennej o nazwie "aa", połączoną z jej inicjalizacją? Pewnie wynika to jakoś z definicji języka, ale z zacytowanej regułki nie umiem tego wywnioskować.
Re: Automatyczne wstawianie średników - pytanie
Author: Jordan Szubert
Date: Wed, 15 Oct 2014 18:11
Date: Wed, 15 Oct 2014 18:11
53 lines
2708 bytes
2708 bytes
Dnia 15-10-2014 o 20:06:16 Piotrek <pilarp@poczta.onet.pl> napisał(a): > W 6. edycji "JavaScript The Definitive Guide", w podrozdziale > 2.5 (Optional Semicolons), znajduje się takie stwierdzenie: > > "JavaScript treats a line break as a semicolon if the next > nonspace character cannot be interpreted as a continuation of > the current statement", > > a zaraz pod nim podany jest taki przykład: > > var a > a > = > 3 > console.log(a) > > Autor twierdzi, że zostanie on zinterpretowany jako: > > var a; a = 3; console.log(a); > > tzn. pierwsza linia będzie niejawnie zakończona średnikiem, > bo bez niego interpreter natrafiłby na niezrozumiały dla niego > ciąg "var a a". > > Taka argumentacja nie przemawia do mnie z dwóch powodów: > > 1. Dlaczego niby 2 pierwsze linie miałyby być bez średnika > zinterpretowane jako "var a a", a nie "var aa" (skąd miałaby > się brać spacja między dwoma "a")? > > 2. Zgodnie z regułką zacytowaną przed przykładem, JavaScript > traktuje koniec linii jako średnik jeśli pierwszy różny > od spacji znak w nowej linii nie może być zinterpretowany > jako kontynuacja bieżącej instrukcji (zakładam, że jest to > równoważność, tzn. jeśli ten warunek nie zachodzi, średnik > nie zostaje automatycznie dodany). > > Skoro tak, to dlaczego rozważany przykład > nie jest rozumiany jako: > > var aa = 3; console.log(a); > > tzn. dlaczego 4 pierwsze linie nie mogą składać się > łącznie na deklarację zmiennej o nazwie "aa", połączoną > z jej inicjalizacją? Pewnie wynika to jakoś z definicji > języka, ale z zacytowanej regułki nie umiem tego wywnioskować. zgadywałbym, że wynika to z tej samej reguły, która sprawia że "var a" i "vara" to są całkiem inne rzeczy -- Jordan Szubert
Re: Automatyczne wstawianie średników - pytanie
Author: DeZ
Date: Wed, 15 Oct 2014 18:57
Date: Wed, 15 Oct 2014 18:57
10 lines
1250 bytes
1250 bytes
W dniu 15.10.2014 o 20:06, Piotrek pisze:> > Skoro tak, to dlaczego rozważany przykład > nie jest rozumiany jako: > > var aa = 3; console.log(a); Zgaduję, że nazwa zmiennej nie może zawierać białych znaków. -- DeZ
Re: Automatyczne wstawianie średników - pytanie
Author: NotBear
Date: Thu, 16 Oct 2014 11:06
Date: Thu, 16 Oct 2014 11:06
24 lines
2018 bytes
2018 bytes
W dniu 2014-10-15 20:06, Piotrek pisze: > tzn. dlaczego 4 pierwsze linie nie mogą składać się > łącznie na deklarację zmiennej o nazwie "aa", połączoną > z jej inicjalizacją? Pewnie wynika to jakoś z definicji > języka, ale z zacytowanej regułki nie umiem tego wywnioskować. Bo reguła została nieco uproszczona, a oryginalna brzmi nieco inaczej. W tym konkretnym przypadku ma zastosowanie: "1. When, as the program is parsed from left to right, a token (called the offending token) is encountered that is not allowed by any production of the grammar, then a semicolon is automatically inserted before the offending token if one or more of the following conditions is true: - The offending token is separated from the previous token by at least one LineTerminator. - The offending token is }." Calosc: http://www.ecma-international.org/ecma-262/5.1/#sec-7.9.1 Czyli nie musi byc tam zadnych spacji, bo srednik jest wstawiany gdy problematyczny znak jest poprzedzony jednym lub kilkoma <LF>,<CR>,<LS>,<PS>. -- NotBear
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads