Neden bazı diller sekmeler yerine boşluk kullanılmasını öneriyor? [kapalı]


10

Belki bunda yalnızım, ama sekmeler yerine boşluk kullanmak isteyen insanlar gibi çok az şey beni rahatsız ediyor. Yazmak, yazmaktan nasıl SpaceSpaceSpaceSpacedaha kolay ve sezgiseldir Tab? Tabii, sekme genişliği değişkendir, ancak boşluklardan boşluk girintisinin çok daha fazla göstergesidir. Aynı şey geri boşluk için de geçerlidir; bir veya dört kez geri al?

Python gibi diller neden sekmeler üzerinde boşluk kullanılmasını öneriyor?


24
Çoğu düzenleyiciyi vurduğunuzda sekmeler yerine boşluk eklemek üzere yapılandırabilirsiniz tab. Bunu favori düzenleyicinizde yapılandıramıyorsanız, daha iyi bir düzenleyiciye ihtiyacınız vardır.
Adam Lear

bir şey, birçok editör 'sekme' basıldığında 4-8 boşluk eklemek için ayarlanabilir, bu yüzden sadece sekme gibi sadece bir tuşa basın.
Echo, Reinstate Monica'ya

2
Hala soruma cevap vermiyor. Neden sekmeler yerine boşluklar? Elbette, düzenleyicinizi sekmeler yerine boşluk ekleyecek şekilde yapılandırabilirsiniz, ancak muhtemelen boşluklu sekmeler de ekleyebilirsiniz. Soru, bunu neden yapmak isteyesiniz ki? Hangi olası fayda elde edilir?
Naftuli Kay

4
@Tk Spaces belirgin sekmeler değiştirilebilir
Martin Beckett

3
@TKKocheran, çünkü sekmeler yanlışlıkla bir dizeye eklediğinizde çıktınıza korkak şeyler yapar.
zzzzBov

Yanıtlar:


15

Öncelikli olarak tutarlılık.

Ayrıca, bazen boşluk olan Python gibi bir şey ortaya çıkıyor: Söyle bana, aşağıdaki kod parçacığını çalıştırırsam ne olacak?

def foo():
    print "a"
    print "b"

Yanıt: Bu iki yazdırma ifadesi aynı düzeyde girintili olmadığından ve aynı kod bloğunun bir parçası olmadığından bir IndentationError hatası alırsınız. (Birincisi bir sekme, ikincisi tüm boşlukları kullanır)

Bir geliştiricinin editörünün sekmeleri 8 boşluğa ve diğerinin 4'e ayarladığı ve birinin garip bir nedenden dolayı 5'i kullandığı sinir bozucu durumlar var ... Bir iş istasyonunda mükemmel normal görünebilir, ancak daha sonra SVN ve birileri güncellenir, korkunç, korkunç bir karışıklık görürler.

Yani bunlar boşluklar veya sekmeler olsun, daima tutarlı olmak için gerçekten iyi iki nedendir.

Ancak, boşluklar girinti üzerinde sekmelerden çok daha fazla denetime izin verir ve editörlerde çalışması için herhangi bir özel yapılandırma gerektirmez. (Daha kolay yapılabilmesine rağmen - örneğin, vim'de, set expandtabsekmeye her bastığınızda boşluk eklemek için kullanın )

DÜZENLEME: Ve eğlenceli bir şekilde, site sekmelerimi boşluklara normalleştirmiş gibi görünüyor, böylece tarayıcı doğru görüntüleyebiliyor. Orijinal sekmeleri görüntülemek için "düzenle" yi tıklayın;)


5
Sekmelerle ilgili sorunlarınız (özellikle, korkunç SVN karışıklığı) yalnızca düzenleyicinizde sekmelerden boşluklara seçeneğini kullanırsanız ortaya çıkar. Siz ve ekibiniz, sekmelerden alana seçeneğini devre dışı bırakmayı kabul ediyorsanız, bir sekme her zaman her görünümde bir sekme olacaktır: o zaman bu sadece düzenleyicinizde ne kadar geniş görünmesini istediğinizin bir seçimidir.
HorusKol

@HorusKol Hayır, korkunç karmaşa, boşlukların ve sekmelerin karıştırılmasıdır. Sanırım yeterince açık (ben, "felaket, felaket karmaşa" satırından sonra yalnız cümle bakın) yapmadım. Böylece boşluklar, 4 boşluk eşdeğeri olarak ayarlandığında sekmelerle güzel hizalanacak şekilde oluşturuldu, ancak daha sonra başka biri görüntülediğinde (sekmelerden boşluklara ayarlanıp ayarlanmadığı) karışıklık yaşarlar.
Izkata

4
Anlıyorum - takımınız için bir kılavuz belirlemeniz gerekiyor - ya sürekli olarak boşluklar VEYA sekmeler kullanın ... her iki durumda da, sekmelerden boşluklara kötü bir fikir;)
HorusKol

21
Bu yüzden boşluk-anlamlı diller fikrini bir tasarım kusuru olarak görüyorum. Göremediğiniz şeyler asla kodunuzu kırmamalıdır.
Paul Nathan

Sadece kayıt için, @PaulNathan
Izkata

11

Bu , Python'daki girinti ve boşluk hakkında iyi bir tartışma; makaleden:

Sekmeleri tamamen önlemek için iyi bir fikir olabilir, çünkü sekmelerin semantiği bilgisayar dünyasında çok iyi tanımlanmamıştır ve farklı sistem ve editör türlerinde tamamen farklı şekilde görüntülenebilirler. Ayrıca, kopyalama ve yapıştırma işlemleri sırasında veya bir web sayfasına veya başka bir biçimlendirme koduna bir parça kaynak kodu eklendiğinde, sekmeler genellikle yok edilir veya yanlış dönüştürülür.

Boşluk çubuğu veya geri tuşuna 2 veya daha fazla kez basma konusundaki argümanınıza gelince, çoğu kaynak kodu düzenleyicisi sekme tuşuna tek bir basışla ve benzer şekilde girintilemeden yapılandırılabilir sayıda boşluk ekleyeceğinden, girinti için boşluklar kullanmak.

Kendim için, ben bir IDE, ya lessda Not Defteri'nde görüntülemek ister kod her zaman aynı miktarda girinti ile görüntülendiği için boşluk tercih ederim ; yani alanlar daha taşınabilir.


3
re: "ister bir IDE, ister daha az veya Not Defteri'nde görüntüleyip görüntülememe; yani boşluklar daha taşınabilir" - bu şimdiye kadar duyduğum boşluklar için en iyi argüman. Ben bir "sekmeler" adamım, ama zaman zaman beklenmedik şekillerde oluşturulan sekme aralıklı kod görmeyi sevmiyorum.
Aerik

2

Python girintisinde program akışını kontrol eder ve bu yüzden hayati önem taşır.
Sekmelerle biçimlendirilmiş kodu alıp sekmeler değiştirilecek veya kaybolacak şekilde kopyalarsanız, kodun yapısı yok olur. Mekanlar her zaman mekan = daha güvenli.

Boşluk çubuğunuzdaki aşınma ve yıpranma sizi endişelendiriyorsa, düzenleyiciniz sekmeleri otomatik olarak boşluklara dönüştürecek şekilde ayarlanabilir.


Daha çok, her ikisini de yapmak için bir tuşa karşı dört kez boşluk veya geri yazmak için harcanan zamanla daha fazla ilgileniyorum.
Naftuli Kay

Evet, ama Python bu şekilde garip. Uzayları önemseyen başka bir şeyle hiç karşılaşmadım.
Aerik

@TKKocheran Oh, bu senin asıl endişen mi? Nasıl yaptıklarını bilmiyorum, ama işimdeki vim, backspace son sekmeye, birden fazla boşlukta, tamamen şeffaf bir şekilde geri dönecek şekilde ayarlandı
Izkata

.vimrcBenim için dökümü yapabilir misiniz :)
Naftuli Kay

1
@TKKocheran Buldum - sadece set softtabstop=4ve hem TAB hem de BACKSPACE sekme olarak 4 boşluk kullanacak. (Peki, her bir tablaya, genişliği 4 boşluk olarak kabul edilir)
Izkata

2

Boşluklar her zaman kullanılmalıdır, çünkü tek başına sekmeler birçok stil için yeterince esnek değildir ve sekmeleri ve boşlukları (neredeyse) karıştırmak her zaman mutlak bir karmaşa üretir.

Genellikle boşluk gerektiren bir stile örnek olarak, şöyle bir şey düşünün:

call_some_function(parameter1,
                   parameter2,
                   parameter3,
                   parameter4,
                   parameter5,
                   parameter6,
                   parameter7);

Tüm işlevlerinizi tek tek sekme boyutunun (parantez için eksi bir) tam olarak katı olacak şekilde yeniden adlandırmak istemiyorsanız, sekmeler bunu yapmaz.

Sekmeleri ve boşlukları karıştırmaya gelince, hemen hemen ciddi bir sorunla karşılaşıyorsunuz: sekmeler aynı şekilde genişletilmiyor. Bazı yazılımlar bir sekmeyi belirli sayıda boşluğa eşdeğer olarak ele alır. Diğer yazılımlar sekme modulo'unu belirli sayıda boşluk genişletir - örneğin, sekmeden sonraki bir öğe her zaman 8'in katlarından oluşan bir sütun numarasından başlayacaktır.

Sekmelerinizle karışan boşluklara karşı emin olsanız bile, hala bir sorununuz var: sekmeler de değişken genişlikli yazı tipleriyle zayıf oynatılıyor. Bu sorun (örneğin) hizalanmış izleyen yorumlar istediğinizde ortaya çıkar:

a.m = 9;   // this is the slope
a.i = 4;   // this is the intensity
a.x = 1;   // this is the x-intercept

Şu an ayakta durduklarında, hepsi mükemmel bir şekilde sıralanıyor. Değişken genişlikli bir yazı tipiyle görüntülendiğinde işler çirkinleşir. Boşluklarla, yorumlar (genellikle) biraz yanlış hizalanabilir. Bununla birlikte, sekmelerle yanlış hizalama genellikle oldukça radikal hale gelir:

a.m = 9;          // this is the slope
a.i = 4;  // this is the intensity
a.x = 1;          // this is the x-intercept

Birdenbire, değişken genişlikli yazı tipimizdeki 'i' ile 'm' veya 'x' arasındaki küçük fark farkı tüm sekme durağına büyütüldü.

Sonuç olarak , ne kadar önemsiz görünse de, sekmelerle kodu görüntüleme biçiminizdeki neredeyse tüm değişiklikler, okunamayan bir karışıklık yaratabilir ve genellikle üretecektir.

Diğer sorularınızı cevaplamak için: Diğerleri zaten işaret etti, ama ben bir programlama editörü (veya başka bir şey) aslında boşluk eklemek için boşluk çubuğunu kullanan kimseyi hayal edemiyorum, bu yüzden hakkında soru: "yazma spacespacespacespace" önemsiz çünkü zaten kimse bunu yapmıyor. Benzer şekilde arka boşlukla: BkSpcbir önceki sekme durağına gitmek için dört kez basmayı gerektiren bir düzenleyiciyi hayal etmek zordur , bu nedenle (yine) soru ilgisizdir.

Alt satır: sekmeler (ve yalnızca siz) kodunuza hiç bakarsanız iyi olur ve bunu hiç bir zaman yeniden yapılandırmayacağınız tek bir düzenleyiciyle yaparsınız (ancak!) Ancak, bu koşullar, yalnızca tek bir makul yanıtın olduğunu zorlayın: asla sekmeleri kullanmayın.


1
Gördüğünüz gibi "orantılı yazı tipleri hem boşlukları hem de sekmeleri kırıyor, ancak sekmeleri daha da bozuyor, bu yüzden boşluk kullan" Neden elastik tablaları kullanmıyorsunuz? nickgravgaard.com/elastictabstops
amara

@sparkleshy: Bu güzel bir fikir, ancak gerçek kodda bir fark yaratmaz ve gerçek editörlerin hepsi (veya en azından büyük çoğunluğu) zaten içermedikçe.
Jerry Coffin

... biliyorum: '(- pekala, tür. Boşluklarla desteklenen bir düzenleyici kullanabilirsiniz (boşluk tuşu kullanıyorsanız sekme tuşu olması gerektiği gibi), ancak elastik sekmeler gibi davranıyor; boşlukları yönetiyor daha kolay.
amara

2
Orantılı genişlikli yazı tipleriyle programlama yapıyorsanız, endişelenmeniz gereken sekmelerden çok daha fazla sorununuz var ...
Brian Knoblauch

1
@BrianKnoblauch: eurofurence yazı tipini kullanan biri olarak katılmıyorum. Bana sorun yaratan tek şey boşluklardır. Ayrıca, satırlar arasında asla birden fazla sekme ile farklılık göstermeyecek olan girinti stilimle de ilgisi var. Elastik tablaları aldığımı varsayarsak, kodum daha iyi görünecek.
Magus

2

Büyük sorun bazen "sekme" genişliğinin tutarsızlığı, bazen dört boşluk, bazen sekiz olarak işlenir. Birçok editörde, bunları 1 ila 9 boşluk olacak şekilde ayarlayabilirsiniz.

Bu basit bir WYSWYG editörünü Bir başkasının alabileceği bir Gördüğünüze dönüştürür.

Bu Python için özel bir sorun, ama aynı zamanda herhangi bir "kıvırcık parantez" dillerinde bir sorun olarak girinti insan okuyuculara anlam iletmek için kullanılır ve berbat sekmeler kodun okunmasını zorlaştırır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.