Dlaczego końcowe białe znaki są tak ważne? [Zamknięte]

116

Końcowy biały znak jest wystarczającym problemem dla programistów, że edytory takie jak Emacs mają specjalne funkcje, które go podświetlają lub usuwają automatycznie, a wiele standardów kodowania wymaga wyeliminowania wszystkich jego wystąpień. Nie jestem jednak do końca pewien, dlaczego. Mogę wymyślić jeden praktyczny powód unikania niepotrzebnych białych znaków i jest to, że jeśli ludzie nie będą ostrożni, aby go uniknąć, mogą zmienić go między zatwierdzeniami, a wtedy różnice zostaną zanieczyszczone pozornie niezmienionymi liniami, tylko dlatego, że ktoś usunął lub dodano spację.

To już wydaje się dobrym powodem, aby tego uniknąć, ale chcę sprawdzić, czy jest w tym coś więcej. Dlaczego więc spacje końcowe są tak duże?

EpsilonVector
źródło
30
Końcowy biały znak to rzeczywiście hałas. Nie mogę wymyślić żadnego innego powodu.
yannis
17
Dobre narzędzie diff powinien być w stanie ignorować końcowe (i prowadzi też, jeśli chcesz) spacje. W końcu Emacs może to zrobić, dlaczego nie twoje narzędzia do porównywania?
FrustratedWithFormsDesigner
4
Przechodzenie do końca łańcucha za pomocą przycisku „End” może być nieporządne z dużą ilością spacji końcowych.
Iarek Kovtunenko
11
Myślę, że zadajesz pytanie w niewłaściwy sposób. Odwrotnie: «jakie są zalety białych spacji? ». Odpowiedź staje się dość oczywista, gdy zadaje się właściwe pytanie;)
deadalnix 24.11.11
7
Może powinieneś spróbować programować w Whitespace . * 8 ')
Mark Booth

Odpowiedzi:

76

Powody, dla których jest to dla mnie ważne:

  • Po naciśnięciu klawisza „End” spodziewam się, że kursor przejdzie na koniec wiersza (w zależności od używanego edytora i sposobu jego konfiguracji) i spodziewam się, że będę mógł od razu zacząć pisać. Jeśli kursor się tam pojawi i muszę usunąć 3 lub 4 znaki, to irytuje. Zwłaszcza jeśli jest niespójny w całym pliku (plikach).

  • Gdy mam literały ciągów obejmujące wiele wierszy, końcowe białe znaki mogą powodować, że łańcuch wyjściowy będzie wyglądał niepoprawnie, gdy zostanie użyty.

Chociaż nie jest to ścisłe programowanie, białe znaki mogą poważnie zepsuć wprowadzanie danych, jeśli istnieje plik końcowy / wiodący w pliku, który zostanie przeanalizowany i użyty jako dane wejściowe do czegoś innego. Dzieje się tak najczęściej, gdy czysty, wygenerowany plik wejściowy zostaje zabrudzony przez osobę edytującą go w programie Excel lub coś, a następnie mogą się wkraść końcowe białe znaki (i inne problemy z formatowaniem).

FrustratedWithFormsDesigner
źródło
8
Punkt 1 jest problemem z twoim edytorem, a nie z końcową białą spacją.
Marjan Venema
32
@MarjanVenema: Tak, można zaprojektować edytor, aby przejść do ostatniej NIE-białej spacji, ale wtedy nigdy nie dowiesz się o końcowej białej spacji (chyba że wskazano to w inny sposób - również prawdopodobnie uznałbym za dziwne, że END nie robi idę do końca linii, do czego jestem przyzwyczajony). Co byłoby problemem w przypadku wieloliniowych literałów łańcuchowych. Zatem edytor musiałby wiedzieć, że w wieloliniowym dosłownym łańcuchu znaków END powinien przejść do ostatniego znaku, w tym białych znaków. Edytor, którego używam, nie jest taki sprytny.
FrustratedWithFormsDesigner
2
Dodanie zaznaczenia za pomocą myszy jest trudne bez wybrania dodatkowych spacji i może mieć znaczenie, jeśli chodzi o wycinaną pastę. Lub że generuje hałas, gdy zatwierdzenie (ostatecznie konfiltuje!) Za darmo. Nie bardzo wielka sprawa, ale wiele drobnych niedogodności. Daje to poczucie, że poprzedni programista był leniwy i oczekuje, że odejdziesz w jego bałaganie.
deadalnix
1
@deadalnix: oczywiście dlatego potrzebujesz dobrego edytora z opcjami odpowiadającymi preferencjom większości ludzi. Dlatego punkt 1 stanowi problem z edytorem, a nie końcową białą spacją.
Marjan Venema,
1
Punkt 1 jest właśnie powodem, dla którego wolę mieć określony styl spacji końcowych: puste linie są wcięte kodem, który oddzielają. Pozwala to na natychmiastowe wstawienie nowego kodu bez konieczności wcięcia.
Xiong Chiamiov
29

Naprawdę nie lubię kończyć białych znaków, ale dokładny powód jest nieco niejasny.

Wydaje mi się, że źródłem tego uczucia nie jest programowanie, ale dziedzina wydawnicza. Czy zdarzyło Ci się kiedyś, że ktoś napisał dokument, który musiał zostać wpisany do publikacji? We wszystkich współczesnych publikacjach, szczególnie w przypadku korzystania z kolumn, zwyczajowo zdania mają następujące po sobie zdania w jednym akapicie, bez rozpoczynania nowego wiersza dla każdego zdania. Cóż, gdy występują końcowe białe znaki, potrzeba dużo więcej wysiłku, aby je poprawnie (wiele operacji wyszukiwania i zastępowania eliminujących podwójne spacje itp.).

Inne powody (w programowaniu), nie dobre powody, wiem, ale przeszkadzają mojej psychice podświadomości w tak irytująco intensywny sposób, że zmuszają mnie do jej wyeliminowania:

  • Zajmuje więcej miejsca do przechowywania niż to konieczne
  • Analizator składni będzie musiał pominąć dodatkowy znak bez uzasadnionego powodu podczas kompilacji
  • Niektórzy redaktorzy mogą dodawać dodatkowy pusty wiersz, gdy WordWrap jest włączony, a końcowe miejsce nie pasuje

Tak tak wiem! Wiem, że to są śmieciowe powody. Nie jestem perfekcjonistą, ale ... no cóż, jestem?

Ostatnim powodem, dla którego mogę wymyślić, jest niespójny ruch kursora. Wydaje się, że kursor zwisa w cienkim powietrzu na końcu linii, każdy krok w prawo może spowodować jego upuszczenie lub zawisnięcie w nieznanym stopniu, po prostu czuje się niepewnie (jak te niewidzialne lub znikające bloki, które Super Mario zwykł skakać).

Prawdopodobnie mogę zdiagnozować szlak spacefobii?

Louis Somers
źródło
Nie moja dziedzina, ale wydaje mi się to dziwne ... jakiego rodzaju systemu składu używasz w publikowaniu na komputerze, który domyślnie nie ignoruje spacji / wielu spacji ? Myślałem, że sposób, w jaki LaTeX i większość języków programowania to robią, jest wszędzie standardowy, z wyjątkiem śmieci WYSIWYG na poziomie konsumenckim.
leftaroundabout
Adobe InDesign (czy to również należy do śmieci WYSIWYG na poziomie konsumenta?). Zignoruje końcowe spacje, tak, ale zastąpi wszystkie wiersze linii spacjami w akapicie, a skończysz na podwójnych spacjach (które nie są ignorowane), wtedy konieczna jest dodatkowa zamiana, aby je wyeliminować.
Louis Somers
„Publikowanie na pulpicie” nie jest czymś, co robisz z „systemem składu”.
rakslice
22

Wiele z tych odpowiedzi prawie dotyka powodu, dla którego jest to dla mnie złe, ale w gruncie rzeczy: „łamie” edytory tekstu. Moje doświadczenie jest z vimem.

Vim jest tak zaprojektowany, że typowe akcje odwzorowują litery tak czysto, że nie musisz nawet myśleć o tym, jaką literę lub kombinację klawiszy uderzyć. Różne skróty klawiszowe pozwalają kursorowi przeskakiwać wokół tekstu tak szybko, że potrzeba tylko kilku naciśnięć klawiszy, aby dostać się tam, gdzie chcesz. Nawet rzeczy takie jak składanie bloków kodu są szybkie, ponieważ możesz nacisnąć END lub $, aby przejść do końca linii, gdzie kursor powinien zachodzić na {lub} lub (lub) lub coś - nie musisz przerywać przepływu myśli dostać pomysł na ekran.

Ale potem pojawia się trochę białych znaków i ruchy kursora nie są już przewidywalne. Twój proces pisania jest przerywany, ponieważ coś, czego nie widzisz, wpływa na to, dokąd zmierza kursor, więc musisz przerwać swój tok myślenia, aby wysłać go tam, gdzie powinien.

Zauważyłeś kiedyś, jak denerwują się ludzie, kiedy są naprawdę skupieni na zadaniu i ktoś im przeszkadza? Tak, znajdowanie końcowych białych znaków w najmniej oczekiwanym momencie jest dokładnie takie.

Na marginesie zauważyłem również, że ludzie, którzy nie dbają o końcowe białe znaki, używają myszy do nawigacji i są z tego powodu wolniejsi maszynistkami ...

Izkata
źródło
2
Krótko mówiąc, szybkość pisania nie ma nic wspólnego z tym, czy używasz myszy do nawigacji, czy nie. Niektóre elementy nawigacyjne doskonale nadają się dla myszy. ; p
Steven Jeuris
2
Jeśli używasz vima, możesz szybko usunąć wszystkie końcowe spacje:%s/ *$//
Giorgio
1
@Giorgio Wiem, ale nie mogę tego zrobić w dowolnym momencie, ponieważ liczy się to jako zmiana kontroli wersji
Izkata
@izkata: True. Sformatuję pliki, które muszę zmienić przed ich zalogowaniem, ale jest to przegrana bitwa, jeśli inni programiści nadal sprawdzają pliki z końcowymi spacjami.
Giorgio
17

Nieoczekiwanie brakuje najbardziej oczywistej odpowiedzi: końcowe białe znaki mogą i będą powodować trudne do znalezienia błędy.

Najbardziej oczywistą sytuacją są łańcuchy wieloliniowe. Python, JavaScript i Bash to kilka przykładów języków, na które może mieć wpływ:

print("Hello\·
····World")

produkuje:

  File "demo.py", line 1
    print("Hello\
                 ^
SyntaxError: EOL while scanning string literal

który jest w jakiś sposób tajemniczy i trudny do rozwiązania, jeśli edytor nie jest skonfigurowany do wyświetlania białych znaków.

Choć podświetlanie składni może pomóc uniknąć takich przypadków, to jeszcze łatwiej nie mając tę kwestię na pierwszym miejscu, nie pozwalając spacje na końcu linii. Właśnie dlatego niektóre kontrolery stylu wyświetlają ostrzeżenie, gdy napotykają końcowe białe znaki, a niektóre edytory przycinają je automatycznie.

wprowadź opis zdjęcia tutaj

Ilustracja: Podświetlanie składni może pomóc w uniknięciu spacji końcowych w sytuacjach, w których może prowadzić do błędów, ale nie polegaj tylko na tym.

Innym kontekstem, krótko wspomnianym w poprzedniej odpowiedzi , są dane przechowywane w plikach.

Na przykład pliki CSV zawierające końcowe białe znaki mogą powodować niespójność danych, co również jest bardzo trudne do wykrycia: parsery zgodne ze standardami przycinają białe znaki (standard wskazuje, że początkowe lub końcowe białe znaki są nieistotne, chyba że są ograniczone podwójnymi cudzysłowami), ale niektóre parsery mogą źle zachowywać się i utrzymywać białe znaki jako część wartości.

Inne niestandardowe formaty mogą szczególnie uwzględniać fakt, że białe znaki są częścią wartości, co prowadzi do spójnych, ale wciąż trudnych do debugowania sytuacji.

Arseni Mourzenko
źródło
14

Niedawno spędziłem dzień na poszukiwaniu błędu, który okazał się nieoczekiwanym końcowym białym znakiem w danych.

ddyer
źródło
13
Myślę, że to błąd; przetwarzanie kodu generowane przez człowieka dane wejściowe powinny odrzucać końcowe białe znaki, a często wiodące białe znaki również powinny być odrzucane.
kevin cline
@kevincline - Powinno być przynajmniej. Jeśli nie jest to widoczne na ekranie lub na wydruku, nie chcę o tym myśleć.
Rook
6
Ponieważ spędziłeś dzień na szukaniu błędu, końcowe białe znaki to wielka sprawa? Edytuj swoją odpowiedź, aby była bardziej ogólna. Dodaj trochę tła, argumentację ... Osobiście nigdy nie miałem problemów z końcowymi spacjami, ale nie używam tego jako wniosku, że one również nie stanowią problemu.
Steven Jeuris,
2
@Steven Końcowe białe znaki spowodowały błąd, który był trudny do wyśledzenia. To dla mnie dobra odpowiedź. Możesz sobie wyobrazić, jak niektóre kody parsujące dane mogą się zepsuć w takiej sytuacji.
Will Sheppard,
Usunąłem białe znaki na końcu danych, a teraz test kończy się niepowodzeniem. Jesteś za to odpowiedzialny. Jak masz na imię? Gdzie mam wysłać rachunek?
Thomas Weller,
8

Kiedy wybieram kod źródłowy programu, aby go skopiować i wkleić (lub usunąć), uważam, że nieco denerwujące jest wyświetlanie wszystkich nieregularnych dodatkowych białych znaków na końcu linii: ponieważ muszę czytać kod podczas jego wybierania , końcowa biała przestrzeń jest niepotrzebnym hałasem. Przykład (kropki oznaczają białą spację):

if (fp)........
{....
    fclose(fp);.
}
else
{.....
    prinft("File is NULL\n");
}..

Ten przykład jest sztuczny, ale widziałem dużo kodu, który wygląda tak.

Giorgio
źródło
7

Poza oczywistym problemem, że w niektórych przypadkach psuje parsowanie? Jak zauważył inny plakat, może powodować subtelne i trudne do prześledzenia błędy. Białe znaki nie zawsze są nieznaczne. W niektórych przypadkach końcowe białe znaki mogą znacznie zmienić znaczenie wiersza kodu lub danych.

W większości przypadków białe znaki służą do formatowania kodu dla ludzkich czytelników. Końcowe białe znaki mogą wskazywać na kilka rzeczy, w tym:

  • Niekompletne oświadczenie;
  • Brakujący komentarz;
  • Błędna edycja; lub
  • Niedbała edycja.

Dwa z nich mogą powodować nieprawidłowe funkcjonowanie, a inne mogą utrudnić zrozumienie kodu.

BillThor
źródło
4

Istnieją języki programowania wrażliwe na białe znaki końca linii. Na przykład skrypt TCL wyświetli błąd, jeśli na końcu wiersza znajduje się spacja.


źródło