Tabulatory a spacje - jaki jest właściwy znak wcięcia dla wszystkiego, w każdej sytuacji, kiedykolwiek? [Zamknięte]

84

Standardy kodowania kodu hostowanego na drupal.org sugerują użycie dwóch spacji do wcięcia kodu; inne witryny sugerują użycie tabulatorów do wcięcia kodu.

Jaki jest właściwy charakter wcięcia dla wszystkiego i w każdej sytuacji? Proszę wyjaśnić udzieloną odpowiedź.

kiamlaluno
źródło
13
Domyślne FTW dla IDE - wystarczy nacisnąć klawisz Tab i zobaczyć, co się stanie
281377,
Cokolwiek wybierzesz, musi być używane przez cały zespół, ale nie wtedy, gdy używasz tabulatorów innych spacji.
Uczeń,
1
Próbowałem to edytować, aby poprawić sugestię, że tabulacje / spacje są jedynym sposobem na wcięcie kodu. Edycja została usunięta, ale mam nadzieję, że ten komentarz pozostanie: Zamiast znaków wcięcia, dlaczego nie użyć lewego marginesu? - może to być w pełni zautomatyzowane przez edytor, a edytory tekstu robią to od dziesięcioleci.
pgfearo
4
Naprawdę nie sądzę, że powinna tu być odpowiedź „zaakceptowana”. Fakt, że odpowiedź z mniejszą liczbą głosów jest tak naprawdę pierwsza, świadczy o tym: dlaczego pytający powinien uzyskać szczególną moc (tj. Być w stanie postawić swoją ulubioną odpowiedź na pierwszym miejscu) tylko dlatego, że zadał pytanie?
Dean Harding,

Odpowiedzi:

129

Przestrzenie

Karta może być różną liczbą kolumn w zależności od środowiska, ale spacja to zawsze jedna kolumna.

Pod względem tego, ile spacji (lub tabulatorów) stanowi wcięcie, ważniejsze jest zachowanie spójności w całym kodzie niż stosowanie jakiejkolwiek określonej wartości tabulacji.

8
źródło
42
Twój drugi akapit jest błędny; odpowiedź to 4!
Daenyth,
5
@ Daenyth - być może, jeśli używasz języka nawiasów klamrowych. Większość Pascal / Delphi używa 2.
Gerry
72
Dlaczego powinienem być upoważniony do twoich 2 lub 4 PRZESTRZEŃ wcięcia, kiedy TAB można dynamicznie ustawić i wskazywać pojedynczy poziom wcięcia?
Kolejka Jé
3
@MGOwen Argument czasu pobierania dla kodowania stron internetowych jest obecnie łatwo rozwiązywany za pomocą minimalizacji źródła w css / javascript i usuwania białych znaków w HTML. Zobacz mod_pagespeed, aby zobaczyć, co mam na myśli.
Evan Plaice,
42
„Karta może być różną liczbą kolumn w zależności od środowiska”. Tak, to właśnie ta zaleta. Każdy może ustawić to według własnego gustu i być szczęśliwym.
Andrea,
249

Zakładki

Teraz oczywiście spójność jest ważniejsza niż jedno, a dobre IDE sprawia, że ​​różnice są nieistotne. To powiedziawszy, celem tego wątku jest święta wojna, więc:

Wolę karty:

  • Są postacią przeznaczoną specjalnie do wcięć
  • Pozwalają programistom o różnych preferencjach wielkości wcięcia zmieniać wygląd kodu bez zmiany kodu (rozdzielenie danych i prezentacja dla przysłowiowej wygranej!)
  • Niemożliwe jest wpół wcięcie czegoś za pomocą zakładek. Więc kiedy kopiujesz kod z witryny, która używa 3 spacji do pliku z wcięciem 4 spacji, nie musisz radzić sobie z niewspółosiowością.
Fishtoaster
źródło
12
Co powiesz na skopiowanie tego wciętego 3 spacji kodu do pliku z wcięciem tabulacji, który ustawiłeś tabulatory na 3 spacje? Kiedy wysyłasz kod do swoich rodaków, zastanawiają się, dlaczego ta funkcja ma tak złe wcięcie!
Wayne Werner
27
Zakładki nie są pierwotnie przeznaczone do wcięć, są przeznaczone do tabelowania i wykonują okropną robotę ...
Timwi
14
@Timwi: Wikipedia zdaje się mówić, że służą one do przesuwania kursora do następnego zestawu stałych kolumn. Nie brzmi jak tabulacja była podstawową funkcją. Miałem też na myśli epokę pisania na maszynie.
Fishtoaster,
40
Ponadto wielu programistów spędza znaczną ilość czasu na pisaniu html, css itp., Ponieważ fakt, że plik z 4 spacjami zamiast tabulatorów jest 5-15% większy, jest w rzeczywistości znaczący. Przykład: ta strona, na której jesteś teraz, jest ładowana co najmniej 10% wolniej niż powinna, ponieważ zespół SE używał spacji . Sprawdź sam.
MGOwen,
23
Kolejna zaleta tego podejścia - mniejsza liczba naciśnięć klawiszy podczas używania klawiszy strzałek do nawigacji w lewo-prawo.
Nicole
117

Używaj tabulatorów do wcięcia początku linii, jednej tabulacji na poziom wcięcia i pozwól wszystkim wybrać, jak szeroka ma być.

Użyj spacji, jeśli ustawiasz znaki w linii, więc zawsze są one ustawione niezależnie od wielkości tabulacji.

I znajdź i uderz wszystkich wczesnych autorów oprogramowania, którzy pozwolili, by ta głupia sprawa stała się problemem.
(Poważnie, dlaczego to w ogóle jest omawiane? Następnie powiesz mi, że chcesz również używać wielu znaków do łamania linii!)

Peter Boughton
źródło
33
Tak tak tak tak tak. Sto procent tak. Dzięki temu każdy może ustawić własną szerokość tabulacji, zachowując formatowanie tabelaryczne. Jeśli martwisz się utrzymywaniem w obrębie 80 kolumn (jak zapewne powinieneś!), Po prostu wybierz dowolny maksymalny oczekiwany rozmiar tabulatora (np. 4) i trzymaj marginesy tabulatorów na tej szerokości. Szczerze, czy to takie trudne?
Jon Purdy,
Tak, ale nie używaj spacji do wyrównania w linii. Twoi koledzy mogą używać proporcjonalnej czcionki, więc grafika ASCII będzie wyglądać dziwnie na ich ekranach.
paperjam
3
To jedyna poprawna odpowiedź tutaj
J.Ashworth,
76

Zakładki

  • pozwalają, aby pomyłki były bardziej zauważalne , denerwujące jest mikro zarządzanie przestrzenią.
  • są spójne , służą tylko do wcięcia, chyba że źle komentujesz.
  • są konfigurowalne , możesz określić w opcjach edytora ich szerokość.
  • są bardziej wydajne , więc po co naciskać 1 kartę, wpisz 4 spacje.
  • zajmują mniej miejsca niż wiele spacji.
  • zajmij więcej miejsca niż miejsce.
  • poświęć mniej czasu na przejście .
  • zwykle działają lepiej w IDE.

Należy używać spacji, gdy tabulatory są całkowicie bezużyteczne.

Nawet w przypadku wyrównywania parametrów i komentarzy zakładki nadal działają lepiej .

Tom Wijsman
źródło
24
wrt „bardziej produktywny”, osobiście nacisnąłem TAB i pozwoliłem IDE wykonać konwersję dla odpowiedniej liczby znaków spacji do wprowadzenia. Być może musisz uaktualnić: p?
Matthieu M.,
3
-1: Bardziej zauważalne błędy: nieprawda; spójny: prawie nie z powodu możliwości dostosowania: tak, ale jest to jednocześnie wadą; bardziej produktywny: nieprawda, praktycznie wszystkie idi mogą konwertować tabulatory na spacje; mniejszy rozmiar: tak, ale praktyczny? Nie; mniej czasu: nie z rozsądnym IDE; wydają się działać lepiej: w ogóle, jeśli używasz wielu środowisk i narzędzi
MaR
@MaR: Zauważalne błędy są prawdziwe, szerokość zakładki jest większa. Także ... Python! Tabulatory są spójne, ponieważ pojedyncza tabulacja jest wcięciem, podczas gdy w przeciwnym razie musisz określić, ile spacji będziesz używał do wcięcia. Dostosowanie jest zaletą. Korzystasz przede wszystkim z kart, więc jest to bardziej wydajne. Wygląda na to, że nie możesz nawet podać dobrego uzasadnienia, dlaczego jest to niepraktyczne, hejterzy będą nienawidzić ...;)
Tamara Wijsman,
@TomWij: W jaki sposób tabulator jest większy niż równoważna liczba spacji? Python jest właściwie jedynym językiem, który uzyskał prawo do bezpiecznego używania tabulatorów (ale nadal - zapewnia jedynie niewielką przewagę w porównaniu do „wstawiania spacji”). Wypróbuj również inne języki, starsze środowiska, różnice / scalenia, terminale, sccs, aby przekonać się, dlaczego tabulatory są wciąż utopiczne „idealne”.
MAR
@MaR: Gdzie podałem „równoważną liczbę spacji”? Próbowałem tych wszystkich, zakładki działają w nich doskonale!
Tamara Wijsman,
41

Wszystkie argumenty na temat kart są świetne w teorii. Ale...

Teoretycznie praktyka i teoria są takie same. W praktyce tak nie jest.

Tak, za pomocą zakładek możesz określić poziom wcięcia. I tak, możesz użyć kombinacji tabulatorów i spacji do wyrównania elementów. I w idealnym świecie tak by było

W rzeczywistości nie widać różnicy między spacjami i tabulatorami, zawsze wydają się mieszać podczas przesuwania kodu, a oglądanie kodu w innym programie, w którym tabulatory są ustawione na 8 kolumn, jest uciążliwe.

Kiedyś korzystałem z kart. Potem zacząłem pracować jako część zespołu i dzielić się kodem. Szybko stałem się zwolennikiem przestrzeni. Więc chociaż mogę współczuć z utopią kart, nie wyobrażam sobie, aby nie używać spacji.

g.
źródło
6
możesz uzyskać edytor taki jak Kate, który wyświetla tabulatory z postacią „ducha” - z łatwością widzę tabulacje i spacje podczas kodowania.
HorusKol
8
Każdy edytor ma teraz opcję „pokaż białe znaki”, a Visual Studio ma opcję „tabify”
Chris S,
2
Dobry argument. Dlatego zrezygnowałem z prób przekonania ludzi, że zakładki są bardziej logiczne. Nawet programiści, którzy powinni być przyzwyczajeni do myślenia abstrakcyjnego, zdają się mylić tabulatory i spacje („jeśli wygląda na cztery spacje, to muszą to być cztery spacje!”). Gwoździem do trumny było dla mnie to, że wydaje się niemożliwe skonfigurowanie Emacsa do wcięcia tylko za pomocą zakładek.
Martin Vilcans
3
+1 Utopia tabulatorów jest świetna, ale za każdym razem, gdy przenosiłem kod między edytorami o różnych szerokościach tab, kod był pomieszany i źle wyrównany. Zbyt łatwo jest po cichu zrobić coś złego za pomocą kart.
Mankarse,
Kiedyś też używałem tabulatorów, ale miałem problemy z niektórymi IDE, które nie mogły wstawiać spacji dla linii kontynuacyjnych i nienawidziłem zastępować tych automatycznie wstawianych spacji spacjami (Visual Studio był jednym z nich). Więc po prostu trzymałem się spacji. Dodatkowo spacje pozwalają na użycie wcięć o połowie wielkości do takich rzeczy jak public:w deklaracjach klas C ++, dzięki czemu wyglądają ładniej (szczególnie w przypadku klas zagnieżdżonych).
szx
31

Niektóre istotne opinie, które mogą być interesujące:

Fishtoaster
źródło
105
To, że jesteś sławny, nie poprawia twojej sytuacji.
Kolejka Jé
@Xepoch: czy przeczytałeś ich uzasadnienie :)?
Matthieu M.,
5
@ Matthieu M., tak, przeczytałem każdy, ale nadal się nie zgadzam. Nie lubię też oliwek, ale nie popełniam błędu, ponieważ robią to inni. Uważam za absurdalne, że ludzie nie
używaliby
2
@Xepoch: tak, chyba każdy ma prawo do własnej opinii :) Myślę jednak, że Guido zwrócił uwagę na główny problem: mieszanie tabulatorów i spacji jest złe, ponieważ oba wyglądają na „puste miejsce” dla użytkownika.
Matthieu M.
3
@Fishtoaster: Kiedy mówisz, że Joel mówi spacje, czy nie powinien to być link do prawdziwego cytatu Joela? Link prowadzi tylko do forum JoelOnSoftware, gdzie niektórzy ppl (najprawdopodobniej nie mówią o Joelu) omawiają tabulatory vs. spacje.
Andreas Magnusson,
23

Zakładki na zwycięstwo.

Joel Barsotti
źródło
20

Ja absolutnie. nienawidzić. 4. spacje.

Dlaczego? Głównie dlatego, że mam dość poruszania się po kodzie za pomocą klawiatury i ciągłego naciskania, left left left leftaby przejść przez jedno wcięcie. Powstało z wczesnych wersji Notepad ++, a nawet zwykłego notatnika Windows, w którym nie było czegoś takiego jak przycisk formatu. Miałem tak wiele problemów, gdy ludzie używali tylko 3, gdy użyłem 4 wszędzie indziej.

Innym powodem jest to, że znak tabulacji istnieje specjalnie dla wcięcia , a dopiero później został zaadaptowany do nawigacji. Dlaczego robimy, space space space spacegdy proste tabdziała? Dlaczego IDE powinno mieć do czynienia z kodem o 2-5 odstępach i poprawnie formatować, skoro działałaby prosta tabulacja i opcja preferencji?

Niestety jestem mniejszością.

TheLQ
źródło
31
Jesteś nieefektywny podczas przeglądania kodów klawiatury. Powinieneś użyć CTRL + LEWY i CTRL + PRAWY, aby przeskakiwać przez białe znaki i tokeny. Wcięcie nie miałoby znaczenia.
Wizard79
7
Skąd bierze się to nieporozumienie, że „zakładki istnieją specjalnie dla wcięć”? Tabulatory nazywane są tabulatorami (tabulatory), ponieważ zostały wymyślone do tabelowania, a nie wcięć , i wykonują straszliwą robotę w obu przypadkach.
Timwi
7
@Lorenzo: Jesteś nieefektywny podczas przeglądania kodów klawiatury. Powinieneś użyć wi b(lub ei ge), aby pominąć białe znaki i tokeny: P
R. Martinho Fernandes
6
Ze względu na diabelskie poparcie: nie zadawaj źle sformatowanego kodu edytorom, które uważasz za gorsze. Użyj zakładek.
Jon Purdy,
11
@Timwi: przepraszam za nekro, ale klawisz tabulacji komputera NIE został wymyślony do tworzenia tabel. Wersja tego klucza TYPEWRITER była, ale do czasu ewolucji klawiatur do użytku z komputerami, klawisz tab był używany do wcięcia więcej niż tabulacji, a termin „tab” stał się synonimem wcięcia. Zakładki KOMPUTERÓW mają wcięcia i tylko zgodnie z konwencją nazwa klawisza odpowiada nazwie maszyny do pisania. Twój argument jest podobny do twierdzenia, że ​​klawisz powrotu komputera miał na celu uruchomienie nowej linii i przesunięcie kursora w lewo, ponieważ po to było w maszynie do pisania :)
Beofett
12

Osobiście lubię używać kart we wszystkim, ponieważ każdy programista może kontrolować wielkość wcięcia na kartę. W ten sposób zyskujesz elastyczność wyświetlania.

To powiedziawszy, zwykle naśladuję styl kodowania w pliku na początku (ponieważ spędzam dużo czasu na pracach konserwacyjnych).

Brandon
źródło
3
Przerywa się, gdy tylko zaczniesz wcięcia dla czegoś innego niż zagnieżdżanie instrukcji. Na przykład, jeśli chcesz wyrównać argumenty funkcji w tej samej kolumnie, po jednym w wierszu. Jest to możliwe, łącząc tabulatory i spacje, ale bardzo żmudne.
finnw
2
To wcale nie jest nużące, ponieważ oznacza to, że możesz tabulować większość miejsca, a następnie po prostu użyć kilku spacji, zamiast konieczności wpisywania dziesiątek spacji, aby dostać się do właściwej kolumny.
Jordan Reiter,
1
@finnw zakładasz, że wszyscy używają czcionek o stałej szerokości - w 2012 r. znaczna liczba programistów używa proporcjonalnych. Jeśli po lewej stronie pierwszego argumentu znajdują się znaki spoza spacji, nie ma możliwości zagwarantowania, że ​​argumenty w kolejnych wierszach zostaną wyrównane dla wszystkich.
paperjam
Nigdy nie próbowałeś pisać HAML, prawda?
alt
2
Nie chcę tego mówić, ale nie wyobrażam sobie programowania w czcionce o zmiennej szerokości. Sama zło tego krasnoluda stwarza standardy, tabulatory kontra spacje, wszystko ... dopiero się starzeję? (Co się stanie, gdy pojawi się komunikat o błędzie z linią i numerem kolumny?)
lunchmeat317
10

Nie sądzę, że istnieje coś takiego jak właściwe wcięcie (przynajmniej nie bez drobnej wojny).

Osobiście lubię cztery spacje. Umożliwiają mi znacznie szybsze czytanie kodu i wyglądają tak samo w każdym edytorze - nawet Vi.

Josip Medved
źródło
9
vi (a raczej vim) jest jednym z lepszych edytorów do pracy z tabulatorami. Oprócz możliwości ustawienia szerokości tabulatorów i automatycznego rozwijania spacji (jak większość edytorów może) masz także softtabstopopcję retaboraz retab!polecenia i .
finnw
Czy dzieci naprawdę umarłyby, gdybyśmy powiedzieli 4 miejsca, zawsze, zawsze, bez wyboru - i ruszyliby dalej?
MGOwen
2
Cztery przestrzenie nie wszędzie wyglądają tak samo. Więcej programistów wybiera teraz proporcjonalne czcionki w swoim IDE, aby uzyskać przyjemniejsze i wydajniejsze kodowanie. W takich sytuacjach cztery przestrzenie mogą wyglądać jak bardzo małe wcięcie.
paperjam
8

Spacje, ponieważ kiedy wyrównujesz komentarze po prawej stronie kodu lub list parametrów funkcji, lub złożonych wyrażeń wielowierszowych, lub rzeczy tego rodzaju, chcesz, aby Twoja piękna praca była odpowiednia dla wszystkich . Jeśli użyjesz tabulatorów i umożliwisz innym ustawianie tabulatorów w inny sposób, przerywają one wyrównanie dla wszystkich oprócz najprostszych przypadków wcięcia kodu.

Poza tym oczywiste jest, że każdy na świecie powinien używać vima, co sprawia, że ​​wcięcie, cofnięcie i poruszanie się po „tabulatorach” nawet w plikach z wcięciem jest trywialne.

Hobbs
źródło
To bardzo dobra cecha wielu redaktorów - możliwość szybkiego przechodzenia przez kopce i kopce przestrzeni.
Christian Mann,
18
Wygląda na to, że rysujesz grafikę ASCII, a nie kodujesz.
rmac
3
Dodałbym: Tabulatory nie mogą być używane do wyrównywania. Jeśli jesteś użytkownikiem tabulacji i chcesz wyrównać, musisz najpierw wpisać odpowiednią liczbę tabulatorów dla wcięcia, a następnie poprawną ilość spacji do wyrównania. Dopiero wtedy zobaczysz kod sformatowany tabulatorami u wszystkich użytkowników i redaktorów.
MAR
6

Tabulatory są naturalnym i ortodoksyjnym wyborem, ponieważ z definicji są używane do wcięć.

Niestety, tabulatory są nierównomiernie zaimplementowane, więc jedynym rozwiązaniem w świecie rzeczywistym są 4 spacje.

Wizard79
źródło
8
Od kiedy tabulatory (tabulatory) są używane do wcięcia „z definicji”? Z samej ich definicji wymyślono je na potrzeby tabelaryczne (chociaż wykonują one również okropną robotę).
Timwi
2
Technicznie rzecz biorąc, klawisz powrotu został wymyślony, aby przenieść głowicę maszyny do pisania na przód linii, podczas gdy przejście do następnej linii zostało wykonane przez obrócenie rolki. Później klawisz powrotu automatycznie przesuwałby również wałek. Jednak nie widzisz, że ludzie się rozłączają po naciśnięciu klawisza Return / Enter. Klawisz tab został wyraźnie dodany do komputerów w celu wykonania wcięcia. To cyfrowy analog tabulatora, który miałem na mojej starej, nieelektrycznej maszynie do pisania. Można ustawić ograniczniki tabulatorów, aby przesunąć rolkę do dowolnej wybranej pozycji, prawie identycznej z obecną rolą klawisza tabulatora w wcięciu.
Jordan Reiter,
@JordanReiter RE: „Nie widzisz jednak, że ludzie się rozłączają po naciśnięciu klawisza Return / Enter.”: Czy nigdy nie spotkałeś się z CR (oznacza przesunięcie głowy maszyny do pisania na przód linii) / LF (oznacza obracanie rolki do następnej linii) problemy?
Max Nanasy
1
Tak, ale to naprawdę problem z systemem operacyjnym, a nie z klawiaturą. Niezależnie od tego, na jakim komputerze jesteś, spodziewasz się, że naciśniesz klawisz Enter lub Return, aby przejść do następnego łącza. Nie używasz jednego klawisza do wydania linii i jednego do wydania powrotu karetki.
Jordan Reiter,
4

Oczywiście potrzebujesz podejścia kombinowanego.

Jeśli dzielisz kod z innymi programistami, musisz ustandaryzować, a ponieważ jest to niemożliwe (koff koff), musisz zmusić wszystkich do zrobienia czterech spacji.

Następnie potrzebujesz edytora, który jest wystarczająco inteligentny, aby nie być głupim, aby wiedzieć, że powinien traktować linię z czterema spacjami z przodu, jak z wcięciem. Każdy nowoczesny IDE lub edytor programisty może automatycznie przepływać kod ze spacjami zamiast tabulatorów.

Dan Ray
źródło
4

Dlaczego ktoś nie może tego zaimplementować:

  • kod jest przechowywany w kompaktowym formacie korzystnym dla danego systemu
  • gdy każdy programista otwiera kod, formatowany jest dokładnie tak, jak tego chce
  • kiedy skończą, wróć do formatu kompaktowego

Wszyscy są szczęśliwi, ponieważ widzą swój „własny” format

Czy to takie trudne?

czosnek Adolf
źródło
2
Ponieważ nie mam wystarczająco dużo wolnego czasu, aby naprawić wszystkie istniejące edytory i środowiska IDE, z których ludzie korzystają, i - nawet gdybym to zrobił - przekonanie wszystkich do aktualizacji byłoby jeszcze trudniejsze.
Peter Boughton,
Jestem pewien, że mogliby wbudować go w SVN lub znaleźć inny sposób na pominięcie narzędzi końcowych.
czosnek Adolf
13
Brzmi jak zakładki. Każdy programista otwiera plik i otrzymuje żądaną szerokość wcięcia.
rmac
1
Możesz już skonfigurować RCS lub CVS do korzystania z indentprogramu.
Kolejka Jé
3
i rozsądnie jest użyć wcięcia, aby wymusić wcięcie / kod foramtting standaryization, aby deweloperzy ze śmiesznymi pomysłami na odstępy nie byli obwiniani / adnotowani za te wszystkie zmiany formatowania
Tim Williscroft
3

Spacje lub tabulatory - To, co naprawdę mówi Atwood, to wybranie jednej rzeczy i zachowanie spójności w projekcie. Jedynym świętym graalem formatowania kodu jest upewnienie się, że jest on spójny, aby psychopata, który utrzymuje twój kod po tobie, nie czuł się zmuszony do trwałej naprawy sytuacji.

To powiedziawszy, jeśli pracujesz w Pythonie lub innym języku, w którym białe znaki są rzeczywistym konstruktem programistycznym, nie wyobrażam sobie używania tabulatorów.

Noah Goodrich
źródło
4
Używam zakładek. Nie wiem, czy programowałeś już w języku Python, ale ważne jest względne wcięcie. Jeśli linia 1 to wcięcia x, a linia 2 to x + 1 wcięcie, uważa się, że jest więcej wcięć. Wcięcia mogą być podwójnymi spacjami, 4 spacjami, tabulatorami, nie ma znaczenia, dopóki jesteś spójny.
Macha
@Macha - Dziękujemy za opinię. Nigdy nie pracowałem nad tworzeniem Pythona, ale wszyscy, którzy powiedzieli mi, że używają spacji, więc interesujące jest spotkanie z kimś, kto używa tabulatorów.
Noah Goodrich,
3
W pracy używam kart z pythonem. To jest okropne.
rhettg
3

Jestem facetem z 4 polami, zakładki po prostu nie są spójne.

Walter
źródło
5
Jak są „niespójne”? Są zawsze pojedynczą postacią reprezentującą jeden poziom wcięcia. To jest właśnie definicja spójnego schematu wcięcia. (I że możesz osobiście, bez wpływu na nikogo, wizualnie sprawić, że każdy sposób, który wybierzesz, jest plusem .)
Lekkość ściga się na orbicie
3

Najwyraźniej tabulatory psują rzeczy w Delphi, więc nie używam tabulatorów w Delphi.

Jednak robię wszystko inne za pomocą Emacsa i zawsze używam tabulatorów, ponieważ moje zakładki idą dokładnie tam, gdzie chcę.

Peter Turner
źródło
Czy możesz podać przykład? Jestem szczerze ciekawy, ponieważ używam Delphi od 15 lat i nigdy tego nie widziałem.
GrandmasterB
1
edn.embarcadero.com/article/10280#4.3 To tylko przewodnik po stylu, ale mieliśmy kilka dziwnych błędów, których nie mogę wyjaśnić z powodu kart. Może to być również spowodowane przez Visual Source Safe. Nie potrafię tego wyjaśnić, to tylko część tradycji naszej firmy.
Peter Turner
1
Problem polega na tym, że domyślne ustawienia instalacji (przynajmniej) niektórych wersji Delphi nie pasują do zwykłych idiomów Delphi. Tak więc otrzymujesz kod, który ma ZARÓWNO.
Gerry
3

Odpowiedź jest taka, że ​​dla każdej sytuacji nie może istnieć pojedynczy właściwy znak wcięcia. Formatowanie przy użyciu znaków jest nieelastyczne i może powodować konflikt, gdy w zespole stosowane są różne style.

Jedyną metodą bezbłędnego i elastycznego formatowania kodu za pomocą różnych stylów formatowania jest wykonanie go wirtualnie, to znaczy bez znaków wcięcia. Jedynym znanym mi edytorem kodu, który to obsługuje, jest ten użyty w poniższym przykładzie:

Aby zademonstrować wirtualny formatowanie , poniżej zrzut ekranu jest z edytora * XSLT, który korzysta z tej metody wcięcia (tam również krótki film tutaj ). Każdy znak w XSLT został podświetlony na żółto, w celach ilustracyjnych, aby umożliwić wyraźne widzenie jedynych znaków tabulacji lub spacji w treści. Wcięcie kodu jest obsługiwane przez system renderujący edytora dostosowujący lewy margines (który ma białe tło).

wprowadź opis zdjęcia tutaj

Jedyne wiodące znaki spacji poprzedzają wiersze Książki , ponieważ jest to dosłowna treść tekstu, a nie kod, te znaki spacji muszą zostać zachowane.

Dzięki wirtualnemu formatowaniu wybierasz szerokość wcięcia, aby dopasować je do środowiska i stylu wcięcia, nie wpływając na żadne znaki w pliku źródłowym. Możesz nawet ustawić szerokość wcięcia na 0, jeśli potrzebujesz spłaszczonego widoku kodu, jak pokazano poniżej:

wprowadź opis zdjęcia tutaj

Aby przeciwstawić to formatowaniu znaków spacji, ten sam XSLT otwarty w edytorze bez formatowania wirtualnego jest przekształcany przez autoformatator tego edytora w następujący sposób:

wprowadź opis zdjęcia tutaj

Większe puste żółte bloki na powyższym zrzucie ekranu wyraźnie pokazują znaki spacji dodane przez formatyzator konwencjonalnego edytora. Niestety, nie można ich teraz odróżnić od prawdziwej treści, dlatego XSLT musiałoby zostać zmodyfikowany, aby rozwiązać ten problem.

Podsumowanie

XSLT jest prawdopodobnie skrajnym przypadkiem, ale ta zasada obowiązuje w wielu językach programowania: Znaki powinny być używane w treściach i alternatywnej metodzie poszukiwanej, jeśli chodzi o formatowanie.

** Ujawnienie: Edytor XSLT z wirtualnym formatowaniem został opracowany przez moją własną firmę *

pgfearo
źródło
1
Niestety masz prawdopodobnie około 50 lat wcześniej. Szczerze mówiąc absurdalny pomysł, że programy są sekwencjami znaków, jest nadal bardzo głęboko zakorzeniony w umysłach większości programistów.
Tom Anderson
3

Do tej pory nie wspomniano: istnieją języki (Python, Haskell), w których znaczenie ma wcięcie. Ale 1 znak liczy się jako 1 znak, spacja lub tabulator, więc wcięcie widoczne przez kompilator może nie być takie samo, jak na ekranie, jeśli używasz tabulatorów.

Dlatego w językach takich jak Haskell spacje są koniecznością. W Makefiles TABS są koniecznością. We wszystkich innych jest to kwestia osobistego gustu, a obecnie nie ma wielkiego znaczenia - każdy porządny edytor ma polecenie „(wiodące) spacje do tabulatorów” i „(wiodące) spacje do tabulatorów”.

Ingo
źródło
2

Kiedyś używałem spacji, ale ostatnio używałem tabulatorów wyłącznie dlatego, że takie było ustawienie Eclipse, kiedy w końcu zauważyłem. Wszyscy inni programiści w moim zespole używają Eclipse, więc sensowne było ujednolicenie zakładek, kiedy zdaliśmy sobie sprawę, że używamy ich już od wieków i nie było powodu, aby zawracać sobie głowę przechodzeniem na spacje. Byłem zaskoczony, jak wiele to nie było problemem.

Ustawienie wyświetlanego rozmiaru tabulatora na 3 lub 5 znaków w twoim IDE znacznie upraszcza rozróżnienie między sekcjami kodu, które są wcięte spacjami (prawie zawsze 4 w tych dniach), a tymi, które są wcięte tabulatorem.

Shabbyrobe
źródło
1

Podano już wiele argumentów, ale nikt nie wspomniał, dokąd moglibyśmy zmierzać w przyszłości .

Tabulatory ani spacje!

Idealnie kod powinien być uważany za dane i nie powinien być przechowywany w żadnym konkretnym formacie tekstowym. Każdy programista może zastosować swój preferowany widok. Ponadto ten widok nie powinien ograniczać się do samego tekstu , ale może obejmować tabele, selektory kolorów i wzory matematyczne.

Ten pomysł nie jest zbyt daleko idący. To edytor programowania zorientowanego na język Meta Programming System (MPS) JetBrain po raz pierwszy uświadomił mi, że to rozwiązuje całą dyskusję, jednocześnie dodając wiele dodatkowych możliwości. (Tak, jest to możliwe dzięki wtyczkom edytora, ale praca nad tekstem bezpośrednio dodaje tyle niepotrzebnych zawiłości, w przeciwieństwie do podejścia MPS.)

W przeciwieństwie do tabulatorów i spacji, istnieje kilka niedogodności, które można wspomnieć o bezpośredniej pracy z abstrakcyjnymi drzewami składni . Wszystko, czego potrzeba, to dojrzewanie technologii do komercyjnie opłacalnego produktu. Pojawiają się pierwsze oznaki tego. Powstała w oparciu o MPS, komercyjny edytor skryptów akcji , Realaxy .

Chciałbym zobaczyć, jak jeden z dużych graczy skacze na koncepcję tej technologii i widzi, co się stanie!

Steven Jeuris
źródło
0

Żadne nie jest lepsze, żadne nie jest gorsze. Jedyną ważną rzeczą jest konsekwencja.

Jeśli jesteś jednym zespołem, wybierz to, co lubisz. Zastanów się, jakie jest domyślne zachowanie ulubionego edytora, ale wybierz cokolwiek chcesz.

Jeśli jesteś w zespole, rób to, co robi zespół. Kropka.

W różnych pracach używałem dwóch spacji, czterech spacji, ośmiu spacji, tabulatorów, spacji i tabulatorów, myślę, że mogłem również użyć jednej spacji. Mówię mojemu redaktorowi, co ma robić, a potem już o tym nie myślę, redaktor opracowuje szczegóły.

Jedyną inną rzeczą jest wybranie inteligentnego edytora. Emacs czy vi? Teraz to święta wojna jestem gotów walczyć :-)

Bryan Oakley
źródło