Słyszałem kiedyś, że pozostawienie nawiasów klamrowych w jednowierszowych wypowiedziach może być szkodliwe w JavaScript. Nie pamiętam już powodu, a wyszukiwanie w Google niewiele pomogło.
Czy jest coś, co sprawia, że dobrym pomysłem jest umieszczenie wszystkich instrukcji w nawiasach klamrowych w JavaScript?
Pytam, bo wydaje się, że wszyscy to robią.
javascript
Wieża
źródło
źródło
Odpowiedzi:
Nie
Ale są zalecane. Jeśli kiedykolwiek rozszerzysz stwierdzenie, będziesz ich potrzebować.
To jest całkowicie słuszne
Jednak zdecydowanie zaleca się, aby zawsze używać nawiasów klamrowych, ponieważ jeśli Ty (lub ktoś inny) kiedykolwiek rozwiniesz instrukcję, będzie to wymagane.
Ta sama praktyka jest stosowana we wszystkich językach w stylu składni C z nawiasami klamrowymi. C, C ++, Java, a nawet PHP obsługują jedną instrukcję bez nawiasów klamrowych. Musisz zdać sobie sprawę, że ratujesz tylko dwie postacie, a przy niektórych stylach usztywniających nie oszczędzasz nawet linii. Wolę pełny styl nawiasów klamrowych (jak poniżej), więc wydaje się być nieco dłuższy. Kompromis jest bardzo dobrze spełniany dzięki temu, że masz wyjątkowo czytelny kod.
źródło
Jest aspekt czytelności - gdy masz złożone instrukcje, może to być bardzo zagmatwane. Wcięcie pomaga, ale nic nie znaczy dla kompilatora / interpretera.
Jest też aspekt rozszerzalności:
Uważa się, że jeśli zawsze masz nawiasy, to wiesz, że możesz wstawić inne instrukcje wewnątrz tego bloku.
źródło
if (a===true) alert(a);
. Teraz jest jasne!Pytanie dotyczy wypowiedzi w jednej linii. Jednak wiele podanych przykładów pokazuje powody, dla których nie należy pomijać nawiasów klamrowych opartych na wielu wierszach instrukcji. Całkowicie bezpieczne jest nie używanie nawiasów w jednej linii, jeśli preferujesz taki styl kodowania.
Na przykład pytanie brzmi, czy to jest w porządku:
Nie pyta, czy to jest w porządku:
Myślę, że pozostawienie nawiasów jest lepsze, ponieważ sprawia, że kod jest bardziej czytelny przy mniej zbędnej składni.
Mój styl kodowania to nigdy nie używać nawiasów, chyba że kod jest blokiem. I nigdy nie używać wielu instrukcji w jednym wierszu (oddzielonych średnikami). Uważam, że jest to łatwe do odczytania i zrozumiałe, i nigdy nie mam problemów ze określaniem zakresu w stwierdzeniach „jeśli”. W rezultacie użycie nawiasów w pojedynczej instrukcji warunku if wymagałoby 3 wierszy. Lubię to:
Preferowane jest użycie jednego wiersza instrukcji if, ponieważ zajmuje mniej miejsca w pionie, a kod jest bardziej zwarty.
Nie zmuszałbym innych do korzystania z tej metody, ale działa ona dla mnie i nie mogę bardziej nie zgodzić się z podanymi przykładami, w których pominięcie nawiasów prowadzi do błędów w kodowaniu / określaniu zakresu.
źródło
/*eslint curly: ["error", "multi"]*/
Technicznie nie, ale poza tym absolutnie tak !!!
Zapomnij o „osobistych preferencjach”, „kod będzie działał dobrze”, „u mnie działa dobrze”, „jest bardziej czytelny” yada yada BS. Może to łatwo doprowadzić do bardzo poważnych problemów, jeśli popełnisz błąd i uwierz mi, bardzo łatwo jest popełnić błąd podczas kodowania (nie wierz ?, sprawdź słynny błąd Apple go to fail ).
Argument: „To osobiste preferencje”
Nie, nie jest. Chyba że jesteś jednoosobową drużyną wyjeżdżającą na Marsa, nie. W większości przypadków inne osoby będą czytały / modyfikowały Twój kod. W każdym poważnym zespole programistycznym będzie to zalecany sposób, więc nie jest to „osobiste preferencje”.
Argument: „kod będzie działał dobrze”
Tak samo jak kod spaghetti! Czy to znaczy, że można to stworzyć?
Argument: „u mnie działa dobrze”
W swojej karierze widziałem wiele błędów powstałych z powodu tego problemu. Prawdopodobnie nie pamiętasz, ile razy komentowałeś
'DoSomething()'
i zastanawiałeś się, dlaczego'SomethingElse()'
nazywa się:Lub dodał „SomethingMore” i nie zauważył, że nie zostanie wywołany (mimo że wcięcie sugeruje inaczej):
Oto przykład z życia wzięty. Ktoś chciał wyłączyć wszystkie rejestrowanie, więc uruchomił find & replace
"console.log"
=>//"console.log"
:Widzisz problem?
Nawet jeśli myślisz: „to jest tak trywialne, nigdy bym tego nie zrobił”; pamiętaj, że zawsze znajdzie się członek zespołu o gorszych umiejętnościach programistycznych od Ciebie (miejmy nadzieję, że nie jesteś najgorszy w zespole!)
Argument: „jest bardziej czytelny”
Jeśli nauczyłem się czegokolwiek o programowaniu, to to, że proste rzeczy bardzo szybko stają się bardzo złożone. Bardzo często jest to:
zmienia się w następujący po przetestowaniu go z różnymi przeglądarkami / środowiskami / przypadkami użycia lub dodaniu nowych funkcji:
I porównaj to z tym:
PS: Dodatkowe punkty trafiają do tego, kto zauważył błąd w powyższym przykładzie.
źródło
Nie ma problemu z konserwacją!
Problem z wami wszystkimi polega na tym, że wszędzie umieszczacie średniki. Nie potrzebujesz nawiasów klamrowych w przypadku wielu instrukcji. Jeśli chcesz dodać oświadczenie, użyj przecinków.
To jest prawidłowy kod, który będzie działał zgodnie z oczekiwaniami!
źródło
if
,else
aalert
nieIf
,Else
iAlert
?if
i(
, jakif(true) doSomething();
Nie ma powodu programistycznego, aby używać nawiasów klamrowych w instrukcjach jednowierszowych.
Sprowadza się to tylko do preferencji programistów i czytelności.
Twój kod nie zepsuje się przez to.
źródło
Oprócz powodu wspomnianego przez @Josh K (który dotyczy również Java, C itp.), Jednym ze specjalnych problemów w JavaScript jest automatyczne wstawianie średników . Z przykładu z Wikipedii:
Może to również przynieść nieoczekiwane rezultaty, jeśli zostanie użyte w ten sposób:
Nie jest o wiele lepiej pisać
ale może tutaj błąd jest trochę łatwiejszy do wykrycia (?)
źródło
To kwestia stylu, ale kręcone szelki są dobre, aby zapobiec ewentualnemu zwisaniu innych .
źródło
Jest wiele dobrych odpowiedzi, więc nie będę powtarzał, chyba że powiem moją „regułę”, kiedy można pominąć nawiasy klamrowe: na warunkach, które „zwracają” lub „rzucają” (np.) Jako jedyne stwierdzenie . W tym przypadku kontrola przepływu jest już jasna, że się kończy:
Nawet „zły przypadek” można szybko zidentyfikować (i naprawić) dzięki końcowej kontroli przepływu. Ta „zasada” koncepcji / struktury dotyczy również wielu języków.
Oczywiście, dlatego też można użyć lintera.
źródło
Oto dlaczego jest to zalecane
Powiedzmy, że piszę
Potem przychodzi następny programista i mówi „Och, muszę zrobić coś innego”, więc piszą
Jak widać, „AlsoTrue” będzie zawsze prawdziwe, ponieważ pierwszy programista nie używał nawiasów klamrowych.
źródło
Obecnie pracuję nad minifikatorem. Nawet teraz sprawdzam to na dwóch ogromnych skryptach. Dowiedziałem się eksperymentalnie: Możesz usunąć nawiasy klamrowe za, jeśli, else, while, function *, jeśli nawiasy klamrowe nie zawierają znaków „;”, „return”, „for”, „if”, „else”, „podczas”, „do”, „funkcja”. Niezależnie od łamania linii.
Oczywiście musisz zastąpić nawias zamykający średnikiem, jeśli nie następuje po nim w innym nawiasie zamykającym.
Funkcja nie może kończyć się przecinkiem.
Testowane na Chrome i FF.
źródło
Zawsze to znalazłem
jest łatwiejsze dla oka niż
również warunkowe, takie jak
są bardziej czytelne (moja osobista opinia) niż
ale myślę, że sprowadza się to do stylu kodowania
źródło
Nie odpowiadam na pytanie bezpośrednio, ale poniżej znajduje się krótka składnia dotycząca warunku warunkowego w jednym wierszu
Dawny:
Można zapisać w ten sposób:
źródło
W javascript jest wiele problemów. Zobacz, jak architekt JavaScript Douglas Crockford mówi o tym. Instrukcja if wydaje się być w porządku, ale instrukcja powrotu może spowodować problem.
źródło
Znalazłem tę odpowiedź, szukając podobnego doświadczenia, więc postanowiłem odpowiedzieć na nią moim doświadczeniem.
Instrukcje bez nawiasów działają w większości przeglądarek, jednak przetestowałem, że metody bez nawiasów w rzeczywistości nie działają w niektórych przeglądarkach.
Od 26 lutego 2018 roku to oświadczenie działa w Pale Moon, ale nie w Google Chrome.
źródło
Początkowy poziom wcięcia instrukcji powinien być równy liczbie otwartych nawiasów klamrowych nad nią. (z wyłączeniem nawiasów klamrowych z cytatami lub komentarzami lub w dyrektywach preprocesora)
W przeciwnym razie K&R byłby dobrym stylem wcięcia. Aby poprawić ich styl, zalecam umieszczenie krótkich prostych zdań if w jednej linii.
zamiast
Gdybym pisał edytor, sprawiłbym, że przycisk automatycznego formatowania zasysał pasek do tej samej linii co foo i wstawił nawiasy klamrowe dookoła paska, jeśli wciśniesz przed nim powrót w następujący sposób:
Wtedy łatwo i spójnie dodać nowe instrukcje powyżej lub poniżej paska w treści instrukcji if
źródło
Czasami wydają się potrzebne! Sam nie mogłem w to uwierzyć, ale wczoraj przyszło mi do głowy podczas sesji Firebuga (ostatnio Firefox 22.0)
wykonane, zrób coś, mimo że mój.condition.key był prawdziwy . Dodawanie szelek:
naprawił tę sprawę. Są miriady przykładów, gdzie najwyraźniej działa bez aparatu ortodontycznego, ale w tym przypadku na pewno nie.
Ludzie, którzy mają tendencję do umieszczania więcej niż jednego stwierdzenia w wierszu, powinni zdecydowanie zawsze używać nawiasów klamrowych, ponieważ takie rzeczy lubią
są trudne do znalezienia.
źródło
Chciałbym tylko zauważyć, że możesz również pozostawić aparat ortodontyczny poza pozostałymi. Jak widać w tym artykule Johna Resiga .
źródło
else
aby dopasować użycie nawiasów - ten przykład wymagałby nawiasów klamrowych welse
bloku w celu przejścia przeglądu kodu. [1]: wiki.qt.io/Qt_Coding_Style#BracesIstnieje sposób na uzyskanie wielu wierszy, nie zawierających nawiasów klamrowych, jeśli instrukcje ... (Wow, jaki angielski ...), ale jest to trochę tedius:
źródło
if (true) funcName()
ielse return null