Czemu ludzie dodają redundantne nawiasy do komponentów?

Czemu ludzie dodają redundantne nawiasy do komponentów?
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10053
1

Praktycznie w każdym projekcie który odpala widzę taki zapis

Kopiuj
return (
  <p>
    <JakiśKomponent/>
  <p/>
);

Ale nie rozumiem zupełnie czemu to niby ma służyć?

Czemu nie taki zapis?

Kopiuj
return <p>
  <JakiśKomponent/>
<p/>;

Wiadomo że nie można dać nowej linii po return, bo JS uzna że to jest nowy statement, ale nadal nie rozumiem czemu ktoś chciałby to zrobić? Ten nawias dodaje dodatkowy indent, i swoją drogą moim zdaniem ciężej się przez to czyta kod.

Ale może coś mi umyka?

edytowany 2x, ostatnio: Riddle
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:2 dni
  • Lokalizacja:Poznań
  • Postów:8759
9

Pierwszy zapis jest dla mnie bardziej czytelny - tak, jak masz np. funkcję czy jakiś blok (chociażby przy for) to obejmujesz go nawiasami i od razu widać, gdzie dany blok się kończy. Tak samo tutaj - masz return, po nim objęte nawiasami to, co ma zostać zwrócone.

To są takie nawyki/zwyczaje, które zwiększają czytelność - masz parę znaków więcej, ale w niczym one nie przeszkadzają, za to łatwiej się czyta kod.

Tak samo jak np. wpis kolegi @Manna5 na blogu - Oto wyjaśnienie ukrytego błę... i mój komentarz do niego - Dlatego dobrze mieć nawyk ZAWSZE dawania klamerek czy innych elementów tworzących blok - nawet, jeśli jest w nim tylko jedna linia kodu.. Podobnie, jak np. w niektórych językach można wywołać funkcję bez nawiasów (jeśli niczego do niej nie przekazujemy), ale ja zawsze i tak staram się zrobić funkcja() zamiast funkcja. Przy takim wywołaniu wprost to jeszcze nie razi, ale jak masz zmienna = funkcja to jeśli nie dasz nawiasów, to możesz na pierwszy rzut oka nie załapać, czy ta funkcja to jest nazwa funkcji, która coś ma zwrócić, czy nazwa zmiennej, wartość której chcesz podstawić do zmienna.


ccwrc
U mnie edytor podświetla automatycznie zakończenie kiedy kliknę na otwarcie nawiasu. Bardzo pomocne.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około godziny
  • Lokalizacja:Laska, z Polski
  • Postów:10053
0
cerrato napisał(a):

Pierwszy zapis jest dla mnie bardziej czytelny - tak, jak masz np. funkcję czy jakiś blok (chociażby przy for) to obejmujesz go nawiasami i od razu widać, gdzie dany blok się kończy. Tak samo tutaj - masz return, po nim objęte nawiasami to, co ma zostać zwrócone.

To są takie nawyki/zwyczaje, które zwiększają czytelność - masz parę znaków więcej, ale w niczym one nie przeszkadzają, za to łatwiej się czyta kod.

A też piszesz

Kopiuj
return (
  true
);

zamiast

Kopiuj
return true;

?

Nie kupuję tego wyjaśnienia, bo z zapisem bez nawiasów też widać gdzie się zaczyna i kończy blok - ten render w JSX zawsze jest ostatnią linijką (chyba że mamy kilka returnów), więc nie ma potrzeby dodawać tego nawiasu.

Tak samo jak np. wpis kolegi @Manna5 na blogu - Oto wyjaśnienie ukrytego błę... i mój komentarz do niego - Dlatego dobrze mieć nawyk ZAWSZE dawania klamerek czy innych elementów tworzących blok - nawet, jeśli jest w nim tylko jedna linia kodu.. Podobnie, jak np. w niektórych językach można wywołać funkcję bez nawiasów (jeśli niczego do niej nie przekazujemy), ale ja zawsze i tak staram się zrobić funkcja() zamiast funkcja. Przy takim wywołaniu wprost to jeszcze nie razi, ale jak masz zmienna = funkcja to jeśli nie dasz nawiasów, to możesz na pierwszy rzut oka nie załapać, czy ta funkcja to jest nazwa funkcji, która coś ma zwrócić, czy nazwa zmiennej, wartość której chcesz podstawić do zmienna.

Zgadzam się z klamerkami {} dla for, if, while, i funkcji. Ale tutaj nie ma klamerek - są nawiasy.

Jedyny mało techniczny powód jaki ku temu widzę to taki że wtedy tag otwierający i zamykający będzie na tej samej linii, tylko że to nie jest do końca istotne, bo jeśli tag ma dzieci to jego dzieci tak czy tak będą aligned, a jeśli jest samozamykająćy się to wtedy to nie ma znaczenia i tak.

Poza tym, w IntelliJ jest opcja żeby alginować tagi nawet bez głupich nawiasów:
screenshot-20230518145650.png

Więc jesli ktoś chce mieć tagi aligned, to czemu miałby z niej nie skorzystać zamiast dodawać niepotrzebne elementy do kodu.

edytowany 3x, ostatnio: Riddle
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
0

są nawiasy. tagi html to nie nawiasy

EDIT: nvm, zle Cie zrozumialem.


λλλ
edytowany 1x, ostatnio: stivens
B2
  • Rejestracja:około 2 lata
  • Ostatnio:3 dni
  • Postów:71
6

Żeby tag otwierający i zamykający były na tym samym poziomie wcięcia. Tak jest ładniej i wg. mnie czytelniej.

Hodor
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Lokalizacja:Warszawa
  • Postów:325
3

Wyprzedziłeś mniej. Wystarczy spojrzeć na podany przez autora przykład żeby wiedzieć co jest lepiej sformatowane patrząc wyłącznie z perspektywy w tym wypadku elementu <p>xyz</p>.

edytowany 1x, ostatnio: Riddle
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:5 dni
  • Lokalizacja:Rzeszów
4

Stańmy z drugiej strony.

Po co jakieś

Kopiuj
return <p>
  <JakiśKomponent/>
</p>;

skoro można

Kopiuj
return <p><JakiśKomponent/></p>;

Jeszcze krócej i ja często faktycznie tak robię - o ile sam dodaję nawiasy, żeby wyrównać start i koniec bloku to nie rozumiem chęci robienia nowej linii dla każdego samotnego komponentu w środku.

Możemy też iść w trolling i pytać po co w ogóle nowe linie, skoro można pisać w jednej - i choć odpowiedź jest dokładnie ta sama - dla czytelności - to jednak to już nie mój poziom dyskusji ;) A można jeszcze niżej...


cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:2 dni
  • Lokalizacja:Poznań
  • Postów:8759
1

screenshot-20230518154959.png

No sorry, ale przykład jest mocno z czapy. W sensie - jest różnica między jednym słowem, które masz zwrócić a jakąś kilkulinijkową konstrukcją - jak podany w przykładzie <p> blalblalbla..... Chociaż ten przykład da się też zapisać tak, jak sugerował (troszkę szyderczo, ale mniejsza z tym) @dzek69 w postaci jednej linijki.

Zgadzam się z klamerkami {} dla for, if, while, i funkcji. Ale tutaj nie ma klamerek - są nawiasy.

No ale co za różnica czy to nawias czy klamerka (która tak w sumie też jest nawiasem i nazywa się nawias klamrowy) albo jakieś inne oznaczeni bloku - np. begin ... end? Chodzi o zasadę - takie jawne zaznaczenie początku i końca bloku jest dla mnie wyraźniejsze/czytelniejsze (ktoś inny może uważać inaczej).

A co najważniejsze - zadałeś pytanie, ja odpowiedziałem i wyjaśniłem. Ty się nie zgadzasz. Myślę, że nie ma sensu ciągnąc tego na kolejne 34 posty, bo i tak żaden z nas nie przekona drugiego. To jak rozmowa o wyższości BMW nad Mercedesem :P

Więc jesli ktoś chce mieć tagi aligned, to czemu miałby z niej nie skorzystać zamiast dodawać niepotrzebne elementy do kodu.

No właśnie, jak ktoś chce i woli to niech pisze tak, a jak preferuje inaczej to niech pisze po swojemu. Naprawdę - nie ma sensu prowadzić o to wojny.
Peace Bro :)


edytowany 2x, ostatnio: cerrato
dzek69
to nie była szydera, żeby <p>blalblabla</p> utrzymać w jednej linijce, przecież nawet dodałem, żeby rozwiać wątpliwości, że sam tak robię.
cerrato
No to się nie zrozumieliśmy - bo ja, patrząc przez pryzmat ostatniego akapitu i wstawek o trollowaniu, odebrałem całość jako szyderę. Wybacz ;)
dzek69
Nie nie, trolling (choć trolling to by był, jakbym nie zaznaczył, że to mógłby być trolling) zaczyna się od momentu, o którym o nim wspominam, to, co powyżej jest 100% na poważnie. Ja się jednolinikkowego JSX nie boję :) https://i.imgur.com/3McYNmD.png W wyszukiwaniu wygląda to gorzej, ale w plikach jest zupełnie czytelnie.
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około godziny
  • Postów:8398
0

Też nie rozumiem sensu tych nawiasów. Tj. rozumiem, jeśli są wytyczne w projekcie i trzeba się stosować, okej, nie mam problemu z dostosowaniem się pod kogoś, jeśli zaistnieje taka potrzeba. Tym niemniej jak mam coś samemu pisać, to wybieram opcję bez nawiasów. Ale może mi się zmieni, jeśli zobaczę, że to rzeczywiście ma sens, na razie to dla mnie zaciemnianie kodu.

Natomiast jeśli mam już coś dodawać (chociaż też nie zawsze dodaję), to wolę dodać klamerki np. niektórzy otaczają nawiasami coś z .map:

Kopiuj
todos.map(todo => (
  <div key={todo.id}>
  </div>)
));

ponieważ wystarczy jakieś refaktor i z takiego mapowania robi się coś takiego:

Kopiuj
todos.map(todo => {
  const someComputation = .....
  return <div key={todo.id}> 
     ......
  </div>;
});

więc czemu nie dodać od razu klamerki? Okej, nawias też można jak ktoś chce, ale nawias spełnia rolę bardziej estetyczną jak wspomnieliście (żeby było "czytelniej"), a klamerki faktycznie ułatwiają potem czynienie zmian. Podobnie jak przy ifach warto robić klamerki, nawet jeśli to jedno wyrażenie póki co.


edytowany 5x, ostatnio: LukeJL
dzek69
czemu nie dodać od razu klamerki bo rzeczy się robi, gdy są potrzebne, a nie "na kiedyś" :) poza tym nie wiem jak w słabym-ale-darmowym-ide jest, ale w takim php storm mogę nakierować się na strzałkę, alt+enter i wybrać, żeby mi zmieniło to na wersję z klamerkami i returnem, wszystko się dzieje samo, więc taki refactor gdy będzie potrzebny można zrobić od razu i nie trzeba się zabezpieczać na przyszłość i dodawać ich już teraz :)
LukeJL
@dzek69 zależy, jak wygodnie ci obsługuje twoje IDE. W VSCode nie jestem świadomy, żeby coś takiego było. Są jakieś żarówki wyskakujące w randomowych momentach, ale tam zwykle nic sensownego nie ma. VSCode dobre jest do nawigacji po kodzie, ale sama edycja/refaktor to bieda. Albo po prostu nie opanowałem skrótów klawiszowych VSC i zwalam winę na narzędzie ;) (próbowałem jeszcze jakieś wtyczki instalować, ale pożałowałem, bo te wtyczki były słabe). Ale jakbym miał na coś zmieniać VSCode to raczej na Vima czy Neovima, bo tam można sobie upraszczać edycję na wiele sposobów.
LukeJL
@dzek69 ale mimo wszystko dawanie klamerek po ifach wydaje mi się i tak bardziej eleganckie.
dzek69
po ifach zdecydowanie!
lsikora
  • Rejestracja:ponad 6 lat
  • Ostatnio:7 miesięcy
  • Postów:40
0

A to nie dla tego, że przez hoisting i złe sformatowanie kod się może zepsuć? Takie potencjalne miesjca można wyłapać na oko, IDE może pomóc, albo można po prostu dodać nawiasy?


Murarz, tynkarz, akrobata
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około godziny
  • Postów:8398
1

raczej ASI (automatic semicolon insertion), tylko że jeśli formatowanie się zepsuje, to wersja z nawiasami też się zepsuje tj. mamy kod dobry:

Kopiuj
function jsx() {
	return "JSX";
}
function foo() {
	return (
		jsx()
	)
}

console.log(foo());

loguje "JSX",
ale rozwalmy formatowanie i nawiasy nie pomogą:

Kopiuj

function jsx() {
	return "JSX";
}
function foo() {
	return 
    (
		jsx()
	)
}

console.log(foo());

i mamy undefined, bo wtedy komputer myśli, że tam jest return;


A5
  • Rejestracja:prawie 5 lat
  • Ostatnio:około rok
  • Lokalizacja:Kraków
  • Postów:115
4

Dużo osób używa jakichś Prettierów i nie jestem pewny na 100%, ale być może one robią coś takiego na domyślnym configu.

TS
  • Rejestracja:ponad 5 lat
  • Ostatnio:6 minut
  • Postów:853
0

Tak jak pisze @adamo51.

Możliwe, że to automatyczny styler tak modyfikuje kod.

G8
  • Rejestracja:około 3 lata
  • Ostatnio:około rok
  • Postów:2000
0
cerrato napisał(a):

Pierwszy zapis jest dla mnie bardziej czytelny - tak, jak masz np. funkcję czy jakiś blok (chociażby przy for) to obejmujesz go nawiasami i od razu widać, gdzie dany blok się kończy.

No to masz szczęście, że nie musisz czytać kodu w Pythonie. A to podobno jeden z bardziej przystępnych języków dla początkujących.

cerrato
Pythona szczerze i serdecznie nienawidzę - właśnie z powodu tych znaczących wcięć. Dla mnie to jest totalna dyskwalifikacja :P
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)