Wydaje się, że ostatnio modne jest pomijanie średników w Javascript. Kilka lat temu był post na blogu , w którym podkreślono, że w JavaScript średniki są opcjonalne, a sedno tego wpisu wydawało się, że nie powinieneś się nimi przejmować, ponieważ są niepotrzebne. Powszechnie cytowany post nie daje żadnych istotnych powodów, aby ich nie używać, tylko to, że ich pominięcie ma kilka skutków ubocznych.
Nawet GitHub wskoczył na modę bez średnika, wymagając ich pominięcia w dowolnym wewnętrznie opracowanym kodzie, a niedawne zatwierdzenie projektu zepto.js przez jego opiekuna usunęło wszystkie średniki z bazy kodu. Jego główne uzasadnienia to:
- jest to kwestia preferencji dla jego zespołu;
- mniej pisania
Czy istnieją inne powody, aby je pominąć?
Szczerze mówiąc, nie widzę powodu, aby je pomijać, a na pewno nie ma powodu, aby cofać się po kodzie, aby je usunąć. To samo odnosi się przeciwko ( lat ) Zalecaną praktyką , która tak naprawdę nie kupić „kulty cargo” argument. Dlaczego więc cała ostatnia nienawiść do średnika? Czy zbliża się niedobór? Czy to tylko najnowsza moda na Javascript?
źródło
;
może złamać kod. Powiedziałbym więc, że jest to przydatne odniesienie do tego pytania.Odpowiedzi:
Przypuszczam, że mój powód jest najsłabszy: programuję jednocześnie w zbyt wielu różnych językach (Java, JavaScript, PHP) - które wymagają ';' więc zamiast trenować moje palce i oczy, aby „;” nie jest potrzebny w javascript, po prostu zawsze dodam ';'
Innym powodem jest dokumentacja: poprzez dodanie „;” Mówię wprost, gdzie spodziewam się końca tego oświadczenia. Potem znowu używam {} cały czas.
Cały argument liczby bajtów uważam za irytujący i bezcelowy:
1) w przypadku popularnych bibliotek, takich jak jquery: użyj Google CDN, a biblioteka prawdopodobnie będzie już w pamięci podręcznej przeglądarki
2) zaktualizuj własne biblioteki i ustaw je tak, aby były buforowane na zawsze.
3) gzip i zminimalizuj, jeśli naprawdę, naprawdę konieczne.
Ale tak naprawdę, ile stron ma największe wąskie gardło prędkości pobierania javascript? Jeśli pracujesz dla 100 najlepszych witryn, takich jak Twitter, Google, Yahoo itp., Może. Reszta z nas powinna martwić się o jakość kodu, a nie o wojny religijne średnikowe.
źródło
Ułatwia to łączenie metod i czyszczenie różnic
Powiedzmy, że o to pytam i mam
Jeśli chcę dodać coś i utrzymywać małą różnicę zatwierdzeń w wierszu , muszę dodać ją powyżej atrybutu. To jedna myśl dłuższa niż „dodaj na końcu”. A kto chce myśleć? =)
Ale kiedy upuszczam średniki, mogę po prostu dołączyć i nazwać to dniem
Ponadto, jeśli zdecyduję się zrezygnować z ostatniej metody, nie muszę ponownie przypisywać średnika i ponownie zanieczyszczać mojego zatwierdzenia.
W porównaniu z uggo
źródło
średniki w JavaScript są opcjonalne
Moim osobistym powodem nieużywania średników jest OCD.
Kiedy używam średników, zapominam 2% z nich i muszę ciągle sprawdzać / dodawać je z powrotem.
Kiedy nie używam średników, nigdy nie wkładam ich przypadkowo, więc nigdy nie muszę ich sprawdzać / usuwać.
źródło
Niedawno napisałem analizator składni / analizatora JavaScript, w którym musiałem pieczołowicie wdrożyć ASI, a także mam swoją kopię kodu Crockford JavaScript: The Good Parts na mojej półce z książkami, która zaleca stosowanie zawsze średników. Intencja była dobra, ale nie zawsze pomaga w praktyce.
Oczywiście ludzie piszący frameworki takie jak jQuery, zepto itp. Są mistrzami składni JavaScript, a zatem znają różnicę między:
i
JavaScript, choć potężny, jest także językiem dla początkujących i powodzenia w wyjaśnianiu tego komuś, kto dopiero się uczy, czym jest
for
pętla. Podobnie jak zapoznanie większości ludzi z nową umiejętnością, istnieją pewne bardziej złożone rzeczy, których nie chcesz od razu wyjaśniać, więc zamiast tego zdecydujesz się zaszczepić wiarę w „kult kultu” w pewne rzeczy, aby po prostu zrzucić je z ziemi. Masz więc dwie możliwości uczenia początkującego, jak pisać JavaScript:return
z a{
, i b) Gdy linia zaczyna się od(
, poprzedzaj to z;
.Wybranie opcji 2 to lepszy zestaw zasad „kultu ładunku”, których należy przestrzegać (spowoduje to bardzo niewiele błędów związanych z ASI), a nawet jeśli dobrze zrozumiesz temat, masz mniej niepotrzebnych postaci na ekranie.
źródło
return
jest uważana za pojedynczą instrukcję, a koniec linii jest odpowiednikiem średnika. Drugi przykład faktycznie zwraca obiekt. Chytry.return
przykład jest w rzeczywistości wyjątkiem od normalnego zachowania JS, które polega na próbie pociągnięcia linii razem, gdy pominięto średnik.return
,break
icontinue
wszystkie wykazują to wyjątkowe zachowanie, w którym końcowy znak nowej linii jest zawsze interpretowany jako koniec wyrażenia. (Źródło to „JavaScript: The Definitive Guide” Flanagana str. 25–26). Osobiście dążę do idei „kodu najmniejszego zaskoczenia”. Pozostawienie średników na ogół powoduje więcej niespodzianek niż cokolwiek innego (generalnie trzymam też nawiasy klamrowe nawet dla prostych stwierdzeń).Jest to ogólna zasada w projektowaniu graficznym , aby pominąć niepotrzebne elementy i ozdoby do zmniejszenia hałasu.
Mniej elementów wizualnych na ekranie oznacza mniej pracy dla naszych mózgów w analizowaniu rzeczywistych użytecznych informacji.
vs.
Przesadzony przykład, ale ilustruje ogólną zasadę: dodatkowe elementy wizualne należy dodawać tylko wtedy, gdy służą celowi. Czy średniki służą temu celowi?
Historyczne powody używania średników w JavaScript:
Problemy ze zgodnością są dziś praktycznie bez problemu. Nowoczesne lintery potrafią równie dobrze wykrywać wszelkie błędy kodu bez średników. Podobieństwo do C / Java / PHP może nadal być brane pod uwagę (patrz zaakceptowana odpowiedź Pat), ale to, że inne języki zawierają zbędne elementy składniowe, nie oznacza, że powinniśmy trzymać je w JavaScript, zwłaszcza, że wiele innych języków (Coffeescript, Python, Ruby, Scala, Lua) nie wymagają ich.
Zrobiłem szybki test, aby sprawdzić, czy w wersji V8 występuje spadek wydajności. To jest Io.js parsujący plik JavaScript 41 MB (Lodash powtórzył 100 razy) z średnikami, a następnie z usuniętymi średnikami:
Każdy musi zdecydować o swoim preferowanym stylu kodowania dla swoich projektów, ale nie widzę już żadnej wymiernej korzyści z używania średników, więc aby zmniejszyć szum wizualny, przestałem.
źródło
Wybór konwencji programowania jest faktycznie taki sam, jak wybór podzbioru języka docelowego. Wszyscy robimy to z typowych powodów: czytelność kodu, łatwość konserwacji, stabilność, przenośność itp. - potencjalnie poświęcając elastyczność. Te powody to prawdziwe powody biznesowe.
Powody, takie jak „oszczędzanie naciśnięć klawiszy” i „programiści powinni nauczyć się reguł JavaScript” są marginalnymi względami biznesowymi, dlatego mają niewielką wagę praktyczną.
W moim przypadku musiałem bardzo szybko dostosować JavaScript, więc skorzystanie z ograniczonego podzbioru języka było dla mnie korzystne. Wybrałem więc podzbiór JSLint JavaScript, włączyłem aplikację Rockstar JSLinter w Eclipse do najbardziej restrykcyjnych ustawień, jakie mogłem znieść, i nie oglądałem się za siebie.
Jestem wdzięczny, że mogę uniknąć szczegółów różnicy między „==” i „===”, lub szczegółów wstawiania średnika, ponieważ mam już listę zadań o wysokości mili i te szczegóły nie będą pomóż wykonać te prace o sekundę wcześniej.
Oczywiście najważniejszą rzeczą w konwencji jest konsekwencja, a myślenie o niej jako podzbiorze językowym pomaga wzmocnić ten imperatyw. I chociaż może to nie pomóc odpowiedzieć na pytanie PO, myślę, że może to pomóc w praktycznym sformułowaniu tego.
źródło
Zupełnie stare pytanie, ale jestem zaskoczony, że nikt nie wspomniał:
Minifikacja: jeśli zdarzyło Ci się zminimalizować fragment kodu JavaScript, który nie kończy jawnie znaków średnikiem, możesz mieć trudności z ustaleniem, co jest nie tak z fragmentem, który działał przed minimalizacją i teraz nie działa.
Dwuznaczność: Średniki są opcjonalne, prawda, jednak eliminując je z kodu źródłowego, można pozostawić parserowi dwuznaczne scenariusze, aby samodzielnie zdecydować. Jeśli piszesz 100 linii kodu dla sklepu internetowego, tak, może to nie ma znaczenia, ale poważniejsze zadania wymagałyby 100% przejrzystości.
Dawno temu czytałem bardzo ładną analogię o czymś innym, ale jest to również bardzo prawdziwe w tym przypadku: (W naszym przypadku) Eliminowanie średników jest jak przejście na czerwonym świetle. W końcu możesz być w porządku lub zostać potrąconym przez ciężarówkę.
Dlaczego w dzisiejszych czasach jest coraz bardziej popularny?
Osobiście uważam, że uruchomienie JavaScript po stronie serwera miało duży wpływ na samą społeczność JavaScript. W naszym przypadku oczywiście nikt nie zamierza zminimalizować JavaScript po stronie serwera (ponieważ kod źródłowy nie powinien być wysyłany do przeglądarki internetowej klienta), więc brak średników wygląda o wiele bezpieczniej, co jest prawdą; Jednak inni programiści, którzy uczą się na podstawie tych książek, artykułów i filmów, niestety odrzucają fakt, że JavaScript po stronie serwera nie jest dokładnie taki sam jak JavaScript po stronie klienta.
źródło
Istnieją dobre powody, aby je zatrzymać.
Nie są tak naprawdę opcjonalne, JS może dodać je z powrotem z automatycznym wstawianiem średników, gdy ich brakuje, ale to nie to samo.
JavaScript Douglasa Crockforda: The Good Parts dwa razy mówi, że to zły pomysł. Automatyczne wstawianie średnika może ukrywać błędy w programie i powodować niejednoznaczność.
JSLint nie zatwierdza.
źródło
JavaScript od ponad dekady nie potrzebuje średników do kończenia instrukcji. Jest tak, ponieważ znaki nowego wiersza są uważane za terminatory instrukcji (uważam, że jest to również wspomniane we wczesnych specyfikacjach ECMAScript). To naprawdę ma sens, tym bardziej, że naprawdę nie ma dobrego powodu, dla którego JavaScript wymaga częstego używania średników, ale nie innych interpretowanych języków deklaratywnych, takich jak Ruby czy Python.
Wymaganie średników może ułatwić napisanie parsera dla języka, ale jeśli każdy tłumacz interpretuje pominięcie średnika, o co właściwie chodzi?
Sprowadza się to do poziomu wiedzy programisty: jeśli wiesz, że możesz pominąć dwukropek, możesz to zrobić, wiedząc, że może to być konsekwencja. Ludzie są maszynami do podejmowania decyzji i prawie wszystkie decyzje wymagają kompromisu lub kompromisu. Kompromisem po prostu rzucanie średnikami dookoła twojego kodu (nawet w miejscach, gdzie nie są one potrzebne) jest to, że twój kod staje się mniej czytelny (w zależności od tego, kogo pytasz), a JSLint nie będzie narzekał (kogo to obchodzi ). Z drugiej strony, kompromis polegający na pomijaniu średników polega na tym, że 90% programistów JavaScript karci cię za to, ale z tego powodu możesz bardziej cieszyć się pisaniem JavaScript.
Co brzmi dla ciebie lepiej; podejmowanie świadomych decyzji lub ślepe podejmowanie decyzji / mentalność stada?
źródło
Mam dwie teorie:
ZA)
Rzecz w tym wyborze polega na tym, że w czasach, gdy obowiązywała JSLint itp., Postanowiłeś poświęcić dużo czasu na łapanie niejasnych błędów składniowych lub rozsądną ilość czasu na egzekwowanie zasad kodowania.
Jednak w miarę zbliżania się do kodu kierowanego testem jednostkowym i ciągłej integracji, czas (i interakcja człowieka) wymagany do wykrycia błędu składniowego znacznie się zmniejszył. Informacje zwrotne z testów szybko wskażą, czy Twój kod działa zgodnie z oczekiwaniami, na długo przed zbliżeniem się do użytkownika końcowego, więc po co marnować czas na dodawanie opcjonalnej gadatliwości?
B)
Leniwi programiści zrobią wszystko, aby ułatwić sobie życie w krótkim okresie. Mniej pisania -> mniej wysiłku -> łatwiej. (również bez konieczności używania średnika pozwoli uniknąć nadwyrężenia prawego palca serdecznego, unikając RSIness).
(Uwaga: nie zgadzam się z pomysłem pominięcia czegoś, co ujednoznacznia stwierdzenie).
źródło
\n
i;\n
są takie sameNie pomijam ich, ale zmieniam zasady, kiedy je wstawiać.
Zasady, z których korzysta większość ludzi
}
się instrukcją funkcjiMoja zasada brzmi: na początku każdej linii, zaczynając od otwierającego nawiasu klamrowego / nawiasu.
Mój jest prostszy, dlatego łatwiejszy do naśladowania i mniej podatny na błędy. Również mała liczba średników ułatwia znajdowanie błędów, które można pominąć.
Kolejnym argumentem jest to, że niesławny
return\nvalue
błąd pochodzi z niewiedzy o ASI. Moja reguła zmusza cię do poznania ASI, więc ludzie używający mojej reguły rzadziej wpadają w pułapkę tego błędu.źródło
Liczba bajtów. Widzicie, złośliwi ludzie zwykle próbują zmieścić się tak bardzo w jednym wierszu kodu. Technicznie rzecz biorąc, nie byłoby to możliwe bez średników. Przypuszczam, że jest to raczej środek bezpieczeństwa niż tylko wymóg programowy. Jakoś to znacznie zmniejszyłoby XSS, gdy staje się wymaganiem, a nie sugestią.
źródło