Tabs vs Spaces: Směrem k lepší kolejnici

Musím se přiznat, že jsem nebyl dlouho vystaven kartám vs. vesmírným válkám, protože po většinu své programovací kariéry jsme se spolu se svými spoluhráči drželi předvoleb, takže jsme se magicky vyhnuli všem problémům, které s tím souvisely. Naštěstí ani jeden z nás neměl na tuto záležitost silné názory. Poprvé jsem viděl, že by to mohl být problém, když jsem začal pracovat jako softwarový inženýr v divizi Windows Core OS společnosti Microsoft, kde vývojáři museli používat mezery nad záložkami ve zdrojovém kódu Windows.

Samotný tým Windows měl za den přes 4000 inženýrů. Je těžké udržet vše konzistentní v takovém měřítku, takže jsem dokonale pochopil, proč jsou zapotřebí některá pravidla. V dokumentaci nebylo žádné zdůvodnění, ale to samo o sobě je zpráva: konzistence je mnohem důležitější než jaká je skutečná volba.

Debata o kartách vs. mezerách není největším problémem v prostoru produktivity, ale když se lidé o tom hádají, používají argumenty, které jsou většinou irelevantní. První a největší je osobní preference, známá také jako „s kartami vidím zdrojový kód tak, jak se mi líbí“.

Ale vidíte, na vašem vkusu nezáleží. Nikdo se nestará o to, co používáte pro své osobní projekty, na kterých pouze pracujete. Používejte názvy proměnných emoji, svislé karty, psejte arabsky, nebo chcete-li získat ještě šílenější postup, použijte PHP, ať už se dostanete na další řádek, do dalšího projektu. Stále můžete vidět zdroj tak, jak se vám líbí, i když používáte mezery.

Preferování karet vs. mezer je důležité pouze v případě, že váš projekt spolupracuje. Záleží jen na týmech. Vaše osobní preference v tomto kontextu nic neznamená. Takže pokud existuje jedna preference lepší než druhá, musí to být ta, která poskytuje jednodušší konzistenci.

Nikdy byste neměli vidět zdrojový kód, jak chcete. Měli byste to vidět tak, jak se týmu líbí. Vlastně ano. Zapomeňte na karty. Co jiného vidíte, jak se vám líbí, ve zdrojovém kódu, když jej zobrazíte? Nic. Vaše IDE nemůže magicky transformovat konvence pojmenování proměnných podle vašich představ, nemůže umístit složené závorky tam, kam chcete, aniž by to kód kódovalo, nebo nemůže aplikovat potřebné refaktory, takže se vám začnou líbit. Ne. Neexistuje nic jako prohlížení zdroje, jak se vám líbí v týmu. Vždy to vidíš, jak to tým vidí. A je to také dobrá věc. Protože tým sdílí stejné chápání toho, jak by to mělo vypadat, je snazší provést kontrolu kódu. Když spárujete programování, nemusíte překonávat preference svých kolegů, když si prohlížíte zdroj, protože kód uvidíte jako tým.

Linus Torvalds nařídil 8-znakové široké karty a 80-znakovou délku řádku pro zdrojový kód jádra Linuxu, ne proto, že je sadista, ale proto, že přispívá k tomu, aby přispěvatelé upustili od psaní hluboce vnořeného kódu. Kód, který proudí svisle a méně vnořený, je mnohem snadněji čitelný než tento:

Suuuuure-you-can!

Takže i přes používání karet Linus přinutil všechny, aby používali pevnou šířku odsazení. Ignoroval osobní preference, protože pevná šířka sloužila významnému účelu: udržování vysoké kvality kódu. Mohl by také pověřit osmibodové odrážky mezerami, které by ztěžovaly obcházet. Proč místo toho vybral karty?

Použití karet pro kód Linuxu mohlo mít smysl z historického hlediska. Linuxový zdroj byl jedním z největších open source projektů skládajících se z milionů řádků kódu. Karty mohly poskytnout dřívější časy sestavení a efektivnější ukládání za starých dní procesorů 66 MHz s 4 MB paměti a pevných disků EIDE.

Nebo mohl Linus prostě jít s výchozími hodnotami, což jsou 8místné karty pro odsazení a dodatečné vybavení argumentů pro něj. Protože i když předpokládáme maximálně 3 odrážky pro každou řadu kódu v dnešním kódu Linuxu, použití karet by znamenalo celkem 100 MB úspor. To je, víte, méně než kolik zabírá tato karta prohlížeče v paměti vašeho počítače. Znaky tabulátoru vám tedy již neposkytují žádnou skutečnou technickou výhodu, a to ani v největších projektech.

Ztrácíte metadata pomocí karet

Používání karet je ztrátové kódování. Zničí informace o preferenci týmu pro šířku odsazení. Tým nemůže sdělit svou preferenci stylu kódování ostatním správně, například pokud se drží na kartách. Tím, že tým pomocí přispěvatelů ztěžuje přizpůsobení přispěvatelů, je to ztracená příležitost vzdělávat se. Prostory se naproti tomu v tomto smyslu dokumentují samy.

Znaky karet také nejsou evidentní. Jsou nerozeznatelné od mezer, pokud jej nástroj výslovně nepodporuje. GitHub ne. Když zobrazíte kód projektu na GitHubu, neměli byste vědět, zda ten chlap dává přednost kartám nebo mezerám a kolik postav je široký, stačí se na něj dívat. Váš požadavek na vyžádání pro tento projekt může místo toho obsahovat mezery, pokud projekt nemá dokument s pokyny pro přispění a pokud jste ho přečetli.

Nejhorší, co byste mohli udělat s kartami a mezerami, je smíchat je. Tyto nehody si lze jen těžko všimnout. Matení záložek pro mezery je možné pouze v případě, že je možné vložit zatracený znak do zdroje. Je pravda, že nástroje mohou tyto problémy zmizet. Ale když se budete držet použití mezer pro odsazení, je nemožné způsobit tento problém na prvním místě. Není to možné jinak: karty nelze použít všude. Kombinace jsou nevyhnutelné.

Pravidlo „žádné pravidlo“

Pravděpodobně nebude možné používat mezery pro odsazení po celou dobu, například v jazyce Go, který má silný přístup k používání karet a je stále populárnější. Nemá smysl se od toho odchýlit, protože přiložené nástroje je těžké používat znaky tabulátoru. Nemusíte se zbytečně mučit. Držte se preferencí vašeho týmu; to je nejdůležitější. Držte se zavedených vzorů. Ale pokud máte na výběr, použijte mezery. Usnadní vám to život.

Ani jsem nepoškrábal povrch hromady argumentů pro obě strany a věřte mi, že jich je příliš mnoho, ale myslím, že to jsou ty, které jsou stále platné dnes nebo dávají smysl nejvíce.

Pokud nový týmový projekt, který vytváříte, je na platformě, která umožňuje jednoduché nastavení Vložit karty jako mezery, zvažte jeho použití. Přemýšlejte o všem peklu, kterým byste se vyhnuli. Existují malé, šťastné kousky prostorů.

P.S. Ne, nemusíte tisknout mezeru několikrát, abyste odsadili mezery.