İkili operatörlerin önüne veya arkasına yeni satırlar koymalı mıyım? [kapalı]


11

Python veya Javascript'deyken, yeni satırların kodunuzu erken sonlandırmasını önlemek için her zaman bir önceki satırın sonuna ikili işleçler koymalısınız ; hataları yakalamanıza yardımcı olur.

Ama C veya C ++ 'da bu bir sorun değil, bu yüzden merak ediyorum:

İkinci sürümü ilkine tercih etmem için herhangi bir neden var mı?

return lots_of_text
       + 1;

karşı

return lots_of_text +
       1;

(Örneğin, bunlardan biri diğer hata türlerini önlemeye yardımcı oluyor mu? Yoksa bunlardan biri daha okunabilir kabul ediliyor mu?)


Hayır, bunu Python'da yapmamalısınız, çünkü çoğunlukla iddia ettiğiniz etkiye sahip değil. Sondaki operatör satırın devam etmesine neden olmaz; ters eğik çizgi veya kapatılmamış parantez, parantez veya parantez kullanmak.

@delnan: Ben (çok dikkatli) asla hat devamına neden olduğunu söylemedim . Hala gruplama karakterleri eklemeniz gerektiğinin farkındayım. Sana bir hata vererek, hattın erken bitmesi ile hataların önlenmesine yardımcı olduğunu söyledim.
user541686

Anlıyorum, ama bunu da yapmıyor. En azından bunun olduğunu hiç görmedim (ve kesinlikle PEP 8'in operatörlerden sonra yeni satırlar koyma kuralını izliyorum) ve operatörden önce yeni satırla geçerli olan ancak operatörden sonra değil, tutarlı olmayan kodu hayal edemiyorum. Örneğin, ilk snippet'inizdeki gibi kod da hatalar (girinti nedeniyle). Hiç kimse bir çizgiyi bölerken girintiler eklemiyor mu?

@delnan: Girintiyi yanlışlıkla metin düzenleyicinizle, örneğin toplu düzenleme veya dikdörtgen seçim yaparken yanlışlıkla vidalamak çok kolaydır. Ve eğer bakım sırasında / ne zaman olursa, ilk durumda bir hata almazsınız ve sessizce sizin tarafınızdan kayır, ancak ikinci durumda güzel bir hata alırsınız.
user541686

4
Bunun neden reddedildiğinden emin değilim. Makul bir kodlama tarzı soru gibi görünüyor.
Stuart Marks

Yanıtlar:


18

Cevaplardan da görebileceğiniz gibi, bu konuda bir fikir birliği yoktur. Bir ekipte çalışmadığınız sürece , daha rahat olduğunuz şeyi kullanın .


Ben operatörlerden önce bir yeni satır ekleme tercih ederim.

Ne zaman satırları kırmak zorunda kalırsam, genellikle aynı "seviye" nin en fazla bir terimini bir satıra koyarım:

Newton'un Python'daki çekim yasası:

force = (
    gravitational_constant
    * mass_1
    * mass_2
    / (distance * distance)
)

Bunu şununla karşılaştır:

force = (
    gravitational_constant *
    mass_1 *
    mass_2 /
    (distance * distance)
)

Bilmek istiyorum, ben "böl o kadar , ben o" mass_2 bilmek istemiyorum mesafeye karesi " alır ben matematiksel ifadelerin nasıl düşündükleri bu değil, çünkü bölünmüş".

Dahası, ben genellikle, ilk bilmek istiyorum neyi ben Operatörü () yapıyorum ben önemsiyorsun önce, bir şeyler yapmak (işlenen).

Veya bu kıvrımlı SQL deyimini düşünün:

WHERE
  a = 1
  AND b = 2
  AND c = 3
  AND ( -- or put the OR on one line together with the AND
    d = 3 
    OR e = 1)
  AND x = 5

Bu, tek tek koşulların çok kolay bir şekilde nasıl bağlandığını görmeme izin veriyor, sadece operatörü bulmak için sonuna kadar her satırı okumak zorunda kalmadan yukarıdan aşağıya doğru kayma yaparak:

WHERE
  a = 1 AND
  b = 2 AND
  c = 3 AND
  ( 
    d = 3 OR
    e = 1) AND
  x = 5

Ben "anlamında eski düşünmek Xo zaman diyerek bu değişiklik, doğrudur": " VE Bu da doğrudur" hangi hissediyor etrafında başka bir yol daha bana daha doğal. Ayrıca, görsel olarak ayrıştırmanın ilk kolaylığını buldum.

Veya bir PHP örneği:

$text = "lorem ipsum"
      . "dolor sit amet, "
      . "consectetur adipisicing elit, "
      . "sed do eiusmod tempor";

Yine, sadece metin birleştirmeyi görmek için dikey olarak okunabilirim, çünkü çoğu zaman dizelerin / koşulların içinde ne olduğunu umursamadığımı hissediyorum.

Tabii ki, bu stili koşulsuz olarak uygulamam. Eğer yeni satırı bir operatörden sonra koymak benim için daha anlamlı görünüyorsa, bunu yapardım, ama şu anda bir örnek düşünemiyorum.


İlk örneğe eksik parantez eklendi.
kevin cline

1
+1: kesinlikle doğru; matematik her zaman dizgindir, böylece devam çizgileri bir işleçle başlar.
kevin cline

Açıkladığınız aynı nedenlerden dolayı +1, ancak PHP örneğiniz bana oldukça garip görünüyor . Bu anlaşmazlıklar sadece olmamalı ., değil .=mi?
Izkata

@Izkata oh evet, elbette haklısın. Teşekkürler. kevin: Parantezler doğruydu;) Onlarla aynı hizaya force
geldim

11

Kod okuyucularına bir sonraki ifadenin değil, bir ifadenin devamı olduğunu açıklamak için neredeyse her zaman ikili operatörlerden önce satırları kesiyorum. Bir sonraki ifadenin normalde girintili olması durumunda bu önemlidir. Örneğin, karmaşık bir koşullu ifadeye sahip bir if ifadesini düşünün :

if (first_part_of_condition &&
    second_part_of_condition) {
    statement_within_then_part;
}

Koşullu ifadenin ikinci kısmı, o zamanki parçanın ilk ifadesiyle kolayca karıştırılır. Durumun ilk kısmı uzunsa ve && sağa doğru biterse bu oldukça kafa karıştırıcı olabilir. Bunu alternatifle karşılaştırın:

if (first_part_of_condition
    && second_part_of_condition) {
    statement_within_then_part;
}

Bu biraz garip görünüyor, ancak durumun ikinci kısmının bir ifadenin başlangıcı olmadığını açıkça gösteriyor.

Bunu başka bağlamlarda da yapıyorum ama girintinin belirsiz olması nedeniyle if ifadesi en önemlisidir. Tabii ki, girinti veya küme yerleşimini değiştirebilir, ancak bu da tuhaf görünüyor.

Çizginin sol ucu hızlı okuduğunu anlama açısından daha önemlidir, bu nedenle operatörü sol ucuna koymak, bunun bir ifade değil, sürekli bir ifade olduğunun daha belirgin bir göstergesidir.


İlginç bir düşünce ama ben bu oldukça kafa karıştırıcı buluyorum (özellikle bittiğinde +ve -aynı zamanda tekli önek operatörleri olarak anlaşılabilir). Devam eden çizgilerin öne çıkması için olağan çözüm, onları daha fazla girintilendirmektir (yani iki seviye).
Konrad Rudolph

"Koşullu ifadenin ikinci bölümü, o zamanki bölümün ilk ifadesiyle kolayca karıştırılır.": Başlangıç ​​ve bitiş yapmak için "{" ve "}" dikey olarak (aynı sütun) hizalarsanız bu gerçekleşmez. blok daha belirgin bir şekilde öne çıkıyor.
Giorgio

8

Her zaman ilkini kullanırdım. Oradaki 1 ile ne yaptığınızın net olmasını istiyorsunuz. Bunu gördüysem ve 1'in üstünde bir metin duvarı olsaydı, o 1'in kullanımıyla ilgili neler olduğunu bilmiyordum.

'+' 1'in yanında olmak, görünürde hiçbir neden olmadan, en azından söz konusu 1 ile bir şey yapıyorum, bunun yerine "Ben tüm kod arkadaşınızdayım ..."


ikinci ...........
James

7

Bir satır, ikili işleçin sonunda olmasını sağlayarak ve böylece ifadeyi tamamlanmamış hale getirerek ifadenin bir sonraki satırda devam ettiğini gösterdiğinde, anlama düzeyinin okunmasına büyük ölçüde yardımcı olduğunu hissediyorum. Eksik noktalı virgül bunu hemen anlayabilmem için yeterli değil.

Bu sadece bir alışkanlık meselesi olabilir, ancak yalnızca noktalı virgül gerektiren dillerde çalışmadığınız sürece (kabuk komut dosyalarının, makyaj dosyalarının ve Python gibi dillerin yaygınlığı göz önüne alındığında oldukça gerçekçi değilim) muhtemelen bu alışkanlığınız da olmayacak.

EDIT: Giorgio yorumlarda mükemmel bir noktaya işaret ediyor: bu kullanım hem matematik hem de doğal dillerde yaygın noktalama işaretlerini yansıtıyor . Sen yazardın

Batıyorum,
bu yüzden yüzdüm

Sen olur değil yazma

Batıyorum
, bu yüzden yüzdüm


3
+1: Ayrıca, satırın sonundaki + işaretini, işlenenler listesindeki iki öğeyi ayıran bir virgül olarak okuma eğilimindeyim. Bu nedenle, virgülle yaptığım gibi bir satırın sonuna + koymayı tercih ederim (asla virgülle satır başlatmam).
Giorgio

@Giorgio Bu nokta o kadar mükemmel ki cevabım için çaldım. Umarım beni affedebilirsin.
Konrad Rudolph

Devam et: Onur duyuyorum. ;-)
Giorgio

7
Kod İngilizce değil ve İngilizce sözdizimi kurallarını kodlama kurallarını haklı çıkarmanın bir yolu olarak kullanmak yanlış bir benzetme olduğunu düşünüyorum. Sondaki operatör stilini sevmiyorum, ancak Konrad'ın Python gibi diller hakkında iyi bir noktaya sahip olduğunu itiraf ediyorum.
M Dudley

3
Matematiksel dizgide, satır sonu her zaman bir işleçten önce olur, asla peşinden koşmaz. Düzyazı örnekte, operatör "bu nedenle" dir. İngiliz nesirinde, virgüller aslında nefes işaretleridir.
kevin cline
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.