Python programcıları boşluk sorununu uygunsuz buluyor mu? [kapalı]


11

Birçok programcı, ilk Python ile karşılaştığında, hemen boşlukların önemi ile ertelenir. Bunun rahatsız edici olmasının çeşitli nedenlerini duydum, ancak bir Python programcısından hiç şikayet duymadım.

Elbette, kariyerimi Java dünyasında geçirdiğim için pek çok Python programcısıyla tanışmadım.

Benim sorum büyük bir Python projesine katılmış olanlarınız için (3 aydan fazla, Python'un birincil dil olduğu): Boşluk sorununu rahatsız edici ve sürekli sinir bozucu buldunuz mu? Ya da akışa girdikten sonra sorun değil mi?

Soruyu sormuyorum çünkü Python'a karşı ya da karşı ya da boşluk kullanımına karşı ya da karşıyım. Python'u sevdim ama asla büyük bir şey için kullanmadım.

Python'da deneyimli değilseniz lütfen spekülasyonlar vermeyin.


2
Eğer yaparlarsa dili kullanıyorlar mıydı? Yapmazdım. Sinir bozucu / dikkat dağıtıcı sözdizimi gereksinimleri, bir proje için farklı bir dil seçmeme neden olabilecek şeylerden biridir (tabii ki seçebileceğimi varsayarak).

boşluk ne zamandan beri bir sorun? :-)
Kugel

22
Herkesin bunu gündeme getirmesinin sakıncalı olduğunu düşünüyoruz. Bunu asla düşünmüyoruz.
Winston Ewert

Beyaz alan sorunu yıllar öncesinden farklı değil - OCCAM2'nin belirgin beyaz alanı vardı. Önemli bir şey değildi.
hızla

4
Can sıkıcı bulduğum tek zaman, sekmeler (veya tam tersi) yerine boşluklar kullanılarak yazılan ve tam anlamıyla görünmez sözdizimi hatalarına neden olan çevrimiçi kopya kodunun yapıştırılması
Cameron

Yanıtlar:


14

Ben boşluk rahatsız edici bulmak ve sadece bir kod bloğu eskisinden daha fazla veya daha az girintili olmak zorunda (örneğin, if:kod önce bir ekleme veya silme ) bulmak için sadece bir durum vardır . C gibi bir dilde yazarken, sadece ifve bir çift diş telini eklersiniz ve (Emacs'ta veya herhangi bir iyi editör hayal ediyorsanız ) editörün girintiyi otomatik olarak düzeltmesine izin vermek için Sekme tuşuna basın. Python'da bunu kendiniz yapmanız gerekir. Tabii ki, bunu kendiniz yapmak için editör kısayolları var, bu yüzden o kadar da kötü değil, ancak fazlalık kaybı programcıya hafif bir ekstra yük getiriyor.

Genel olarak, ekranımın yarısının aşağıdaki gibi çizgilerle dolmasını önlemek için bir kazanç:

         }
      }
   }
}

1
Python'u konuşan makul bir editörde, kod bloğunu hatırlatmanın çok kolay bir yolu var. Wing IDE'de, sadece bloğu seçip Sekme tuşuna (veya girinti seviyesini azaltmak için Shift-Tab'a) basarım.
Adam Crossland

1
Evet, Emacs'ta bloğu seçip C-c >veya tuşuna basın C-c <. Yine de bunu kendiniz yapmak zorundasınız. Başka bir deyişle, boşluk ve kod mantığı gereksiz olmadığından, dev bir blok M-x indent-regionseçemez ve hepsini "doğru" girintilemek için arayamazsınız (ya da editörünüzün sürümü ne olursa olsun).
dfan

6
@Adam, iyi bir editör, girinti düzeyinizi değiştirmenizi kolaylaştırır. Ancak parantez dilinde, yeni kodu yapıştırabilir ve dosyayı yeniden canlandırmak için en sevdiğiniz tuş vuruşuna basabilirsiniz. Tada! Girinti doğrudur. Python'da yapıştırmanız, seçmeniz, girintilemeniz / girmeniz gerekir. Çok değil ama burada parantez için küçük bir galibiyet var.
Winston Ewert

@ Winston - editörünüz olmalı. Yapıştırdığınız kod kendi başına doğru girintiyse, sağa / sola birkaç seviye çok fazla gelirse, sadece buna göre hizalamak için sekme (SHIFT +) Sekmesi yazmanız gerekir - tuşa basmanın gerçek bir farkı değil dosyayı yeniden girin. Ayrıca - kodu kopyalamayacak / yapıştırmayacaksınız :)
Ingo

1
@Winston: Tab ve Shift-Tab kullanırken bile Notepad ++ girintili bloklar, henüz vim kısa yolunu bulamadım, ama yeterince kullanmıyorum sanırım: p
Matthieu M.

50

Python'un önemli boşluklarını seviyorum. Bana göre bu sözdizimsel düzeyde DRY'nin mükemmel bir örneğidir. Bir kod bloğunun nerede başladığını ve bittiğini göstermenin insan tarafından okunabilir yolu girintilidir. Kodunuzun okunabilir olmasını istiyorsanız, dilden bağımsız olarak girintiyi girmeniz gerekir. Programlayıcının bu bilgileri bir kez derleyici / yorumlayıcı için ve bir kez de insanlar için iki kez belirtmesi saçmadır. Ayrıca, C benzeri dillerdeki girinti bir yoruma benzer: Anlaşılabilirliği geliştirmeyi amaçlamaktadır, ancak anlamı derleyici / yorumlayıcı tarafından uygulanmamaktadır ve gerçek anlamla (parantezlerin olduğu yerlerde) çok kolay senkronize olabilir, açıklığa kavuşturmaktan ziyade şaşırtmak.


8
Kendinizi Tekrarlama için +1. İyi uygulama, kodu yine de blok yapısını yansıtacak şekilde girintilendirmektir, o zaman neden başlangıç ​​/ bitiş işaretleri de var?
Steve314

12

Önemli boşluk gerçekten benim için uygun . Beni daha az yazıyor. Kodu düzgün ve açık bir şekilde biçimlendirir. Bu nedenle, kodu daha okunabilir hale getirir.

(Aynı nedenlerle Haskell'deki önemli boşlukları da seviyorum.)


1
Olumlu deneyimlerimi Haskell beyaz alanı ile de paylaşırdım, ancak FarmBoy, Python ile 3 aylık bir deneyime sahip olması gerektiğinde ısrar etti, başka bir şey spekülasyon oldu. :-)
Ingo

1
1998 yılından bu yana Python ile yaşadığım deneyim, bu yüzden cevabım muhtemelen yeterlidir :) (Haskell ile olan deneyimim çok kötü.)
9000

@ 9000 Haskell Python'dan önce gelse bile! : D
pradyunsg

8

Python'u ilk kullandığımda, boşluk alanı yeni ve bu nedenle can sıkıcı bir kısıtlama oldu.

Şimdi farketmiyorum bile. 11 aydır python kullanıyorum.


5

Öncelikle - ekmek ve tereyağı dillerim Python, SQL ve Java. Python'un boşluğunu seviyorum - daha az sözdizimi ve yazım ve insanları okunaklı, düzgün biçimlendirilmiş kod yazmaya zorlar. OTOH, Java'nın ayrıntılarından nefret ediyorum - o kadar ki aslında Java'da yazmak zorunda olduğum tüm kazanı üretmek için Python'u kullanıyorum , bu da verimliliğime hayran olan tüm Java iş arkadaşlarımı etkiliyor.

Bir büyük uyarı, kodun web'den kopyalanması / yapıştırılmasıdır - genellikle temizlemek için ekstra bir adım gerektiren karışık alanlara ve sekmelere neden olur ve genellikle yalnızca bir çalışma zamanı istisnasından sonra yakalarım.


Vim kullanılmak amaçlı - hatalar çok yardımcı gibi sözdizimi vurgulama sekmeler için Düzenleyicinizi anlatmak highlight link RedundantSpaces Error | au BufEnter,BufRead * match RedundantSpaces "\t" | au BufEnter,BufRead * match RedundantSpaces "[[:space:]]\+$"benim vimrc içinde
Daenyth

4

Bir programcı beyaz boşlukların öneminden rahatsız olursa, muhtemelen bir python programcısı olmayacaktır.


1
Python'u vaaz eden The Whitespace Thing (tm) ile ilgili problemleri olduğunu söyleyen birkaç kişi duydum ama bir süre sonra beğenmeye başladı. Gözlemime göre, daha fazla insan bu konu hakkında bir tartışmaya katıldıkça, bunlardan birinin böyle bir hikayeyi anlatma olasılığı birine yaklaşıyor. (Düzenle: İkinci cevap hemen kanıtlandı ...)

@delnan, buna abone olabilirim.
Ingo

3

Bahse girerim, önemli boşluklarla ilgili bir problemi olan ve Emacs gibi iyi bir programcının metin editörü ile deneyimi olmayanlar arasında, katılımı olmadan en fazla girintiyi ele alan önemli bir çakışma bulacaksınız.

Her durumda, Python'u içselleştirdikten sonra, artık sorun değil; aslında, özlü olması ve ekranda aldığı küçük alan okunabilirliğe büyük avantaj sağlar. Öncelikle Python kullandığım için, daha fazla fazlalık (örneğin Java ve C #) yazmak için kendimi disipline etmek zor olan diller buluyorum. Girintisi zaten yapısını sinirlerim üzerinde net ızgaralar yapan kodun etrafına parantez koymak.


3

Gerçek kodlama için, bu hiç de elverişsiz değil, aslında yararlıdır (bkz. Dsimcha'nın cevabı).

Öncü boşluklara saygı duymayan iletişim teknolojileriyle uğraşırken (programlama amaçlı olmayan birçok web forumu gibi ve ayrıca HTML şablonlama dilleri gibi farklı bir dile Python kodunu gömdüğümde) can sıkıcı olabilir. Python'daki önde gelen boşluğu ayıran araçlarda bir kusurdan daha fazlası, kod yapısını iki kez ifade eden gereksiz dillerin bu tür yıkıcı ortamları işlemek için daha iyi donanımlı olduğu doğrudur (kodu bir düzenleyiciye yapıştırabilir ve açık yapısal işaretleyicilere dayanır veya kodun insanlar tarafından okunmak yerine yalnızca yürütülüp yürütülmediğine dikkat etmez).


2

Beyaz alanı sinir bozucu bulmuyorum. Diğer dillerde çok sinir bozucu girintili veya tutarsız girinti buluyorum. Bu sorunun, stilin çözmesi amaçlanan sorunlardan biri olduğunu anlıyorum.

Python benim ana dillerimden biri değil.

Girintide zaman zaman sinir bozucu sekmelerin ve boşlukların kullanımını buluyorum. Bu, düzenleyicileri bir düzenlemeden diğerine değiştirirken veya başka birinin yazdığı kodu düzenlerken sorunlara neden olabilir. Çözülmesi genellikle önemsizdir.


1
sekmeleri ve python girintisinde boşluk karıştırma cehennem için en kısa yoldur: p
Matthieu M.

@ Mattieu: Kesinlikle, bu benim canım.
BillThor

1

Ben belirli bir sırayla bir C # / Javascript / XBase arka plan geliyor ve Python ile dabblings benim için hiç bir düşünce değil. Diğer dillerdeki diş telleri gibi - işte böyle çalışır, kuralların söylediği gibi şeyleri yerleştirir ve gözlerinizi kurutmak benim tutumumdur.

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.