JSHint'in '+' hatasından önce kötü satır kırmanın açıklaması


125

Birisi bana JSHint'in neden aşağıdakiler hakkında şikayet ettiğini açıklayabilir mi?

window.location.href = String1
    + '#'
    + Sting2
    + '='
    + String3;

Hata ile, Bad line breaking before '+' error

Bu hatanın şu şekilde tanımlanan laxbreak seçenekle yapılandırılabileceğini anlıyorum:

Bu seçenek, kodunuzdaki muhtemelen güvenli olmayan satır kesmeleriyle ilgili uyarıların çoğunu bastırır. Virgül öncelikli kodlama stiliyle ilgili uyarıları bastırmaz. Bunları bastırmak için laxcomma kullanmanız gerekir (aşağıya bakın).

Bu açıklama oldukça kısa ve satırları bu şekilde kırmanın neden ilk etapta kötü veya gevşek kabul edildiğini merak ediyorum.

Unutmayın, burada kutsal bir savaş başlatmaya çalışmıyorum, sadece JSHint halkının neden kötü olduğunu düşündüğüne dair nesnel bir cevap arıyorum, ister sadece kendi linterlerine enjekte ettikleri bir stil tercihi olsun (JSLint'in görüşlü linter) veya bu şekilde satır kırarken bazı tercümanlarda yanlış gidebilecek bir şey varsa.


6
JSHint'e göre sadece "kötü stil" olduğunu düşünüyorum. Baştaki virgül kullanırsanız aynı etkiyi elde edersiniz. Okunabilirlik için en azından satırın sonunda + ile yeniden yazarım.
Iwan

28
Aylak. Bence bu stil, özellikle kodu dar bir pencerede görüntülerken, çok satırlı dizelerle kesinlikle en okunabilir stildir.
Lambart

12
İfadeyi devam ettiren belirteçlerle liderlik etmek, işleri hizalamaya yardımcı olur ve kod bloğunun sol bölümünde devam etmeyi görsel olarak ifade eder; bu, özellikle hızlı tarama yapılıyorsa yapısal öğeleri bulmanın beklendiği yerdir. Kesinlikle uygulanabilir ve makul ve nesnel olarak kötü bir tarz değil. Bununla birlikte, bu kuralı uygulamak için talihsiz bir kod bütünlüğü sorunu vardır.
Adam Tolley

1
@AdamTolley Tamamen katılıyorum ve bunu sorduğumda bunun FUD olduğuna dair onay gibi görünen şeyi aldım. "Meta etki" den sonra incelemeye alındı; ve bu inceleme, bunun uygulanabilir ve makul olduğunu doğruladı.
HostileFork,

2
Günümüzde ( JSHint 2.9.4 ) hata mesajı '+' dan önce yanıltıcı satır sonu şeklindedir; okuyucular bunu bir ifade sınırı olarak yorumlayabilir.
RhinoDevel

Yanıtlar:


107

Otomatik noktalı virgül ekleme ile ilgili varsayımlara maruz kalabilecek ifadelerden kaçınmak için bir stil kılavuzu .

Buradaki fikir, bir satırın sonunda ifadenin orada mı biteceğini yoksa sonraki satırda mı devam edebileceğini netleştirmenizdir.


6
Cevabınız için teşekkürler, hatanın arkasında bir mantığa sahip olmak, JSHint'i yatıştırmak için değişiklik yapmayı haklı çıkarmamı çok daha kolay hale getiriyor.
James McMahon

36
Otomatik noktalı virgül ekleme, bu tarzın uygulanması için makul bir mantıktır. Ancak ifade bir parantez içinde olduğunda uyarı devam eder. Ve bu beni üzüyor.
Ben Hyde

23
ikinci @BenHyde ve genel olarak, satırda bir +. Soldaki tek bir sütunu takip etmek, bir sonraki satıra eklenip eklenmeyeceğini görmek için her satırın en ucuna atlamaktan daha kolaydır (ve hataya daha az meyillidir). dilbilgisi bile daha az hantaldır: "118. satır, 117 satırını ekler" ve "117. satır, 118. satırın sonuna eklenecektir."
worc

9
Şahsen, satırların sonuna operatör (ve virgül) eklemekten nefret ediyorum çünkü onu geçiyorum. Çok satırlı boole ifadelerindeki mantığı okumak benim için daha kolay (&& veya || sondaki yerine satırın başında) ve virgülle ayrılmış listeleri diğer çok satırlı ifadelerden ayırmak için bunlara bir virgül. Laxbreak için şükürler olsun
aaaaaa

2
@Barney Otomatik noktalı virgül ekleme endişesini çok benzer soruma verilen cevaplarla nasıl bağdaştırıyorsunuz ? Bu formatın haklı riski nedir? Bana göre taranabilirlikte üstünlüğü var.
HostileFork,

8

Yeni satırın tersine satır sonundan önce + 'yı kullanırsanız, Jshint bunu kötü bir satır sonu olarak işaretlemeyecektir. Şöyle:

window.location.href = String1 +
'#' +
Sting2 +
'=' +
String3;

10
Bu soruya bir nebze bile cevap vermiyor. Neden bu kadar çok artı oy var?
Lambart

4
Belki de bu, jshint ayarlarınızı değiştirmek zorunda kalmadan bu sorunu çözmenin bir yoludur.
asulaiman

4
Bu bir yorum olmalı çünkü soruyu gerçekten cevaplamıyor, ancak değerli bilgiler sağlıyor.
tomtomssi

3

Soruya doğrudan bir cevap değil, ancak Google'dan bu konuyla karşılaşan (benim yaptığım gibi) kuralı korumak isteyen ancak uyarıları düzeltmek isteyen herkes için aşağıdakiler faydalı olabilir ...

Notepad ++ kullanırken (örneğin JSLint eklentisiyle), bu aşağıdaki ara ve değiştir yöntemi kullanılarak düzeltilebilir:

  • Ne buldun: (\r\n|\n|\r)( *)\+
  • İle değiştirin:  +$1$2  (ilk ve son boşluk dahil)
  • Arama Modu: Normal ifade

(Yalnızca Windows üzerinde test edilmiştir, ancak normal ifade Unix veya Mac OS satır sonlarıyla da çalışmalıdır.)

İçin de benzer bir şey yapmak için ||, &&, ==, !=, <=veya >=yerine+ , bunu kullanın:

  • Ne buldun: (\r\n|\n|\r)( *)(\|\||&&|==|!=|<=|>=)
  • Şununla değiştir: (ilk ve son boşluk dahil) $3$1 $2 

5
Biçimlerini değiştirmek isteyenler için yararlı olabilir. Ancak (zımni) soruyu yanıtlamakta tamamen başarısız oluyor: "Bu şekilde satır kırmanın neden ilk etapta kötü veya gevşek görüldüğünü merak ediyorum."
Lambart

Adil nokta, üst kısma bunu neden yayınladığımı açıklayan bir not ekledim.
Steve Chambers
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.