Javascript'ten noktalı virgülleri kaldırma / atlama yönündeki son değişiklik neden?


80

Javascript’ten noktalı virgül atlamak son zamanlarda modaya uygun görünüyor. Birkaç yıl önce Javascript'te noktalı virgüllerin isteğe bağlı olduğunu ve yazının özü gerekmediği için onlarla uğraşmamanız gerektiğine vurgu yapan bir blog yazısı vardı . Yaygın olarak belirtilmiş olan yazı, onları kullanmamak için zorlayıcı nedenler vermez , sadece onları dışarıda bırakmanın çok az yan etkisi vardır.

GitHub bile , noktalı virgülsüz bir çoğunluğa sıçradı , dahili olarak geliştirilen herhangi bir kodda ihmal edilmesini istedi ve zepto.js projesine son zamanlarda yapılan bir taahhüt , sahibinin tüm noktalı virgüllerini kod tabanından çıkardı. Baş gerekçeleri şunlardı:

  • ekibi için tercih meselesi;
  • daha az yazarak

Onları dışarıda bırakmak için başka iyi nedenler var mı?

Açıkçası onları atlamak için hiçbir neden göremiyorum ve kesinlikle onları silmek için kodun üzerinden geri dönmek için hiçbir neden göremiyorum. Aynı zamanda ( yıllarca ) önerilen "kargo kültü" argümanını gerçekten almadığım uygulamalara karşı çıkıyor . Peki, neden tüm son noktalı virgül nefreti? Başgösteren sıkıntısı var mı? Yoksa bu sadece son Javascript fad mı?


2
"Önerilen uygulama yıllar" bir soru başvurmak kara listeye SO anketler etiketinin olası görüş her türlü desteklemek için bu yetkili kılan
sivrisineği

24
@gnat, çünkü insanlar SO'da soruyu nefret ettikleri için, insanların görüşlerini daha az geçerli kılmaz.
Ryathal

3
@gnat “StackOverflow üzerinde resmi olarak uygun görülmeyen sorular” bazen uzman topluluğu tarafından çok yetkili sayılır. Acı ama gerçek.
MarkJ

4
@gnat Kara listedeki soru aslında neden ihmal etmenin ;kodunuzu kırabileceğine dair ilginç örneklere sahiptir . Yani bu soru için faydalı bir referans olduğunu söyleyebilirim.
Andres F.

1
Bu , 2010’ların başlarında hipsterlerin yükselişiyle ilgili olabilir .
Alex

Yanıtlar:


62

Sanırım nedenim en lamestir: Aynı anda çok fazla farklı dilde programlarım (Java, Javascript, PHP) - ';' gerektiren parmaklarımı ve gözlerimi eğitmek yerine ';' javascript için gerekli değildir, her zaman ';'

Diğer sebep ise dokümantasyon: ';' Açıkça, ifadenin bitmesini beklediğim yeri kendime belirtiyorum. Sonra tekrar her zaman {} kullanıyorum.

Bütün bayt sayısı argümanı rahatsız edici ve anlamsız buluyorum:

1) jquery gibi ortak kütüphaneler için: google CDN’yi kullanın ve kütüphane muhtemelen tarayıcı önbelleğinde olacaktır.

2) kendi kütüphanelerinizi versiyonlayın ve sonsuza dek önbelleklenecek şekilde ayarlayın.

3) gerçekten, gerçekten gerekliyse gzip ve küçültün.

Fakat gerçekte kaç sitenin javascriptlerinin indirme hızını düşürdüğü en büyük hızları vardır? Twitter, google, yahoo vb. Gibi ilk 100 site için çalışıyorsanız, belki. Geri kalanımız sadece noktalı virgül dini savaşlar değil kod kalitesi için endişelenmeliyiz.


3
Sanırım tam tersi de doğru olabilir. Python web için daha popüler hale geldikçe, JS'nizin pythonuna benzemesi daha kolaydır.
Ben DeMott

4
Deneyin ama o zaman aynı bayt savaşçıları satırların başında gereksiz boşluk için benden sonra olacaktı. (Ayrıca Javascript hatalarına sahip olurdum, çünkü
Pat

6
Bayt sayısını azaltmak önemliyse, dosyaları mümkün olduğunca en aza indiren bir şey elde edersiniz. Henüz bir minimizer kullanmaya değmiyorsa, kaldırılması konusunda endişelenmeye değmez ';' bayt sayısından tasarruf etmek için.
Lawtonfogle

3
bayt sayısı aslında zorunlu olarak azaltılmaz, aslında yeni bir satır sık ​​sık (her zaman değil) aslında iki karakter (yeni satır sonra satır başı), yani en verimli alan olan yeni satır olarak arttırılabilir. satır, bir kez bir karakter noktalı virgülle aynı karakterde olacaktır (tüm JS kodunuzu bir satırda sıkıştıysanız, geliştirme kaynak kodu için değil, dağıtılan JS kodu için sık sık yapılırsa).
ALXGTV

İnsanların, noktalı virgüllerden daha fazla bayt gerektiren derin yuvalamayı anlamak için girintiye ihtiyacı vardır. Noktalı virgüller, yine de, basılan tuşlara ait atıkları rahatsız ediyor.
Cees Timmerman

39

Metot zincirlemesini kolaylaştırır ve daha temiz hale getirir

Diyelim ki hakkında jQuerying ve ben var

$('some fancy selector')
  .addClass()
  .attr();

Bir şeyler eklemek ve satır tabanlı işlem yapma farkımı küçük tutmak istiyorsanız , onu attr'nin üstüne eklemek zorundayım. Yani sadece "sonunda ekle" den daha uzun bir düşünce. Ve kim düşünmek ister? =)

$('some fancy selector')
  .addClass()
  // new method calls must go here
  .attr();

Ancak, noktalı virgülleri düşürdüğümde, onu her gün ekleyebilir ve çağırabilirim.

  $('some fancy selector')
    .addClass()
    .attr()
+   .animate()
+   .click()

Ayrıca, son yöntemi bırakmaya karar verirsem, yarı kolonu yeniden atamak ve tekrar taahhüdümü kirletmek zorunda değilim.

  $('some fancy selector')
    .addClass()
    .attr()
    .animate()
-   .click()

Uggo'ya karşı

  $('some fancy selector')
    .addClass()
    .attr()
+   .animate();
-   .animate()
-   .click();

37
Bu niş kullanım durum IMO.
JBRWilkinson

9
Ancak yine de ilginç.
Jonathan,

8
Sonunda başlangıç ​​çizgisi olarak girintili yeni bir satırda noktalı virgül olabilir. Sonra istediğiniz gibi kopyalar ve yeniden düzenlersiniz. Bu aynı zamanda zinciri güzelce kapatır.
Nux

11
Sadece birisinin neden emirlerinin ne kadar düzgün göründüğünü önemsemediğini merak eden kişi mi? Genel bir kural olarak, insanlar kodu okur, fark etmez.
Jules

11
@Jules, daha temiz farklar birleşmelerin başarılı olma ihtimalinin daha yüksek olduğu anlamına gelir.
joeytwiddle

22

JavaScript'teki yarı sütunlar isteğe bağlıdır

Yarı virgül kullanmamamın kişisel sebebim OKB.

Noktalı virgül kullandığım zaman bunların% 2 sini unutuyorum ve sürekli kontrol etmem / eklemem gerekiyor.

Yarı virgül kullanmadığım zaman, yanlışlıkla bir tane koymuyorum, bu yüzden onları kontrol etmek / çıkarmak zorunda kalmam.


3
İyi bir. Noktalı virgül içermeyen bir satırda iki ya da iki noktalı bir çizgi tarafından yakıldım.
Jonathan

3
Noktalı virgül yoksa, kodunuzu doğru ayrıştırmayacak ayrıştırıcılar (örn. GeSHi) vardır. İnsanların böyle hatalar yapmayacağını söyleyebilirsiniz ... Fakat cidden - olay, tüm ekibiniz noktalı virgüllerin kesinlikle nereye konması gerektiğini hatırlayabiliyorsa olay, gerçekten sabah kahvesi olmadan hatırlayacaklarını mı düşünüyorsunuz? Ve birçok zihinsel durumu kodlayacaklar. Bundan emin ol.
Nux

16

Kısa süre önce ASI'yı titizlikle uygulamak zorunda olduğum JavaScript için bir ayrıştırıcı / analizör yazdım ve ayrıca her zaman noktalı virgül kullanmayı savunan, kitap rafımdaki Crockford'un JavaScript: İyi Parçalar'ın bir kopyasını da aldım . Amaç iyi, ancak pratikte her zaman yardımcı olmuyor.

Açıkçası, jQuery, zepto, vs. gibi çerçeveler yazan insanlar JavaScript sözdizimi uzmanlarıdır ve bu nedenle arasındaki farkı bilirler:

return
{
    status: true
};

ve

return {
    status: true
};

JavaScript, güçlü olmasına rağmen, aynı zamanda bir başlangıç ​​dilidir ve bunu sadece bir fordöngünün ne olduğunu öğrenen birisine anlatmakta iyi şanslar . Çoğu insanı yeni bir beceriye tanıtmak gibi, hemen açıklamak istemediğiniz daha karmaşık şeyler de vardır, bu nedenle bazı şeyleri sadece onları yerden çıkarmak için "kargo kültü" inancına sokmayı tercih edersiniz. Yani, yeni başlayanlara JavaScript yazmayı öğretirken iki seçeneğiniz var:

  1. Onlara her satırın sonuna her zaman noktalı virgül koymalarını söyleyerek "bu kurala uyma ve nedenini sorma" deyin. Ne yazık ki, bu yukarıdaki örnekte veya ASI’nin yolunda gittiği herhangi bir örnekte yardımcı olmuyor. Ve Bay veya Bayan acemi programcısı, yukarıdaki kod başarısız olduğunda şaşırır.
  2. Onlara "bu iki kurala uymalarını ve nedenini sormalarını" söyleyin, her satırın sonunda noktalı virgülle uğraşmamalarını söyleyin ve bunun yerine her zaman a) izleyin. A returnile takip edin {ve b) Bir satır bir ile başladığında (, hazırlayın bir ile ;.

Seçenek 2'yi seçmek daha iyi bir "kargo kültü" kurallar dizisidir (uyulması gereken çok az ASI ile ilgili hataya yol açar) ve konuyu derinlemesine anlasanız bile, ekranda daha az gereksiz karakteriniz olur.


8
Tamam, ısırırım. Yukarıdaki iki örnek arasındaki sözdizimi arasındaki farkı anlamama yardımcı olun. Eğitimsiz gözüm biçimlendirme konusunda sadece bir fark görüyor.
Jesse C. Dilimleyici

9
Ya da diğer taraftan, cevabın tamamen kazayla karşılaştıklarını gördüm. İlk örnekte, returnyalnız bir ifade olarak kabul edilir ve satır sonu bir noktalı virgülün eşdeğeridir. İkinci örnek aslında nesneyi döndürür. Tricksy.
Jesse C. Dilimleyici

9
JavaScript'in yeni başlayan bir dil olduğu fikrine katılabileceğimi sanmıyorum, JavaScript'te basit açıklamaları olmayan tonlarca tutarsızlık ve sürpriz etkisi var. IMO'ya yeni başlayanlar dili böyle olmaz, JavaScript'i orta dil olarak adlandırırdım.
Ryathal

2
@ Ryathal Neye ulaştığınızı anlıyorum, ancak bunu bir ara dil olarak adlandırmak, hangi dilde arabuluculuk yaptığını merak etmemi sağlıyor. Sesi, kendi başına bir hedeften ziyade başka bir şeye yolculuk için bir adım gibi yapıyorsunuz.
Racheet

9
Netleştirme noktası: returnÖrnek aslında, bir yarı-kolon atlandığında çizgileri çekmeye çalışmak olan normal JS davranışına bir istisnadır. return, breakve continuehepsi , takip eden bir yeni satırın her zaman ifadenin sonu olarak yorumlandığı bu istisnai davranışı sergiler. (Kaynak Flanagan'ın "JavaScript: Tanımlayıcı Rehberi" s. 25-26). Şahsen, ben "en az sürpriz kod" fikri için gayret gösteriyorum. Noktalı virgül bırakma, her şeyden daha çok sürprizlerle sonuçlanma eğilimindedir (genellikle kıvırcık ifadelerimi basit ifadeler için bile saklarım).
Kyle,

16

Bilgi yüklemesi gibi bir şey yoktur, sadece kötü tasarımdır.

- Edward Tufte

Bu bir var grafik tasarım genel kural gürültüsünü azaltmak için gereksiz elemanların ve süsleme bırakmak.

Ekrandaki daha az görsel öğe, beyinlerimizin gerçek yararlı bilgileri ayrıştırması için daha az çalışma anlamına gelir.

let foo = 1

vs.

let /* variable */ foo = 1; // EOL

Elbette abartılı bir örnek, ancak genel prensibi gösterir: Ek amaç, eğer sadece bir amaca hizmet ederlerse eklenmelidir. Peki, noktalı virgüller bir amaca hizmet eder mi?

JavaScript'te noktalı virgül kullanmanın tarihsel nedenleri şunlardı:

  • C / Java ile benzerliği koruyun
  • Kötü yazılmış tarayıcılar ve araçlarla uyumluluk sorunlarından kaçının
  • İnsanlara ve makinelere kod hatalarını tespit etmede yardımcı olmak
  • Otomatik Noktalı virgül ekleme, performans cezası taşır

Uyumluluk sorunları bugün hemen hemen hiç sorun değil. Modern linter herhangi bir kod hatalarını algılayabilir sadece de noktalı virgül olmadan. C / Java / PHP ile benzerlik yine de göz önünde bulundurulabilir (Pat'nin kabul ettiği cevaba bakınız ), ancak diğer dillerin gereksiz sözdizimi öğeleri içerdiği için, özellikle diğer birçok dilde (JavaScript, Python, Ruby, Scala, Lua) bunları gerektirmez.

V8'de performans cezası olup olmadığını görmek için hızlı bir test yaptım. Bu Io.js, 41 MB JavaScript dosyasını (Lodash, 100 kez tekrarlandı) noktalı virgüllerle ve daha sonra noktalı virgüllerle kaldırılarak ayrıştırıyor:

$ time node lodashx100.js
node lodashx100.js  2.34s user 1.30s system 99% cpu 3.664 total
$ time node lodashx100s.js
node lodashx100s.js  2.34s user 1.15s system 99% cpu 3.521 total

Herkes, projeleri için kendi tercih edilen kodlama stiline karar vermek zorunda, ancak artık noktalı virgül kullanmanın somut bir faydasını göremiyorum, bu yüzden görsel gürültüyü azaltmak için durdum.


Bu isteğe bağlı sözdizimine eklemek için aklın şimdi yapması gereken yükte gereksiz unsurları dışarıda bırakma argümanına karşı koyardım. Şimdi noktalı virgül, ihmal edilirse büyük bir zihinsel zorlanma değildir. Bu Ruby ve Scala ile yaşadığım bir konudur. Çağrının içinde çağrıları olan bir çağrı zinciri haline geldiğinde ve hepsi her parlamayı atlattığında, ayrılmak bir yüktür.
Seamus

8

Bir programlama kuralı seçmek, hedef dilin alt kümesini seçmekle aynı şekilde etkilidir. Bunu hepimiz olağan nedenlerden dolayı yaparız: kod okunabilirliği, bakım kolaylığı, kararlılık, taşınabilirlik vb. - esnekliği potansiyel olarak feda ederken. Bu nedenler gerçek iş sebepleridir.

"Tuş vuruşlarını kaydetme" ve "programcılar JavaScript kurallarını öğrenmelidir" gibi sebepler marjinal iş sebepleridir, bu nedenle pratikte az ağırlık taşırlar.

Benim durumumda JavaScript’te çok hızlı bir şekilde hızlanmam gerekiyordu, bu nedenle dilin sınırlı bir alt kümesini kullanmak benim avantajımdı. Bu yüzden, JavaScript'in JSLint alt setini seçtim, Eclipse'deki Rockstar uygulamaları JSLinter'i, dayanabileceğim en kısıtlayıcı ayarlara getirdim ve geriye bakmadım.

"==" ve "===" arasındaki farkın ayrıntılarından veya noktalı virgül ekleme detaylarından kaçınabildiğim için minnettarım, çünkü zaten bir mil yüksek görev listesi var ve bu bilgiler Bir saniye önce bu işlerin yapılmasına yardımcı olun.

Elbette bir sözleşmeyle ilgili en önemli şey tutarlılıktır ve bir dil altkümesi olarak düşünmek bu zorunluluğu güçlendirmeye yardımcı olur. Bu, OP'nin sorusunu cevaplamaya yardımcı olmasa da, bunun pratik çerçevesine yardımcı olabileceğini düşünüyorum.


5

Oldukça eski bir soru, ancak kimsenin bahsetmediğine şaşırdım:

Minifikasyon: Yarı-kolon karakterli ifadeleri açıkça sonlandırmayan bir JavaScript pasajını küçültmek durumundaysanız, miniksellikten önce çalışan bir pasajda neyin yanlış olduğunu bulmakta zorlanabilirsiniz. ve şimdi çalışmıyor.

Belirsizlik: Yarı-kolonlar isteğe bağlıdır, doğrudur, ancak bunları kaynak kodundan çıkararak, belirsiz bazı senaryoları ayrıştırıcıya kendi karar vermek için bırakabilirsiniz. Bir çevrimiçi mağaza için 100 satır kod yazıyorsanız, evet, belki de önemi yoktur, ancak daha ciddi işler% 100 netlik gerektirir.

Uzun zaman önce başka bir şey hakkında çok güzel bir benzetme okudum ama bu durumda da çok doğru: (Bizim durumumuzda) Yarı-kolonleri ortadan kaldırmak kırmızı ışıkta geçmek gibidir. Sonunda iyi olabilirsin ya da bir kamyoneti çarpabilirsin.

Neden bugünlerde daha popüler hale geliyor?

Kişisel olarak JavaScript'in sunucu tarafında çalışmasının, JavaScript topluluğunun kendisinde çok fazla etkisi olduğuna inanıyorum. Bizim durumumuzda, açıkçası hiç kimse sunucu tarafındaki JavaScript'i küçültmeyecek (kaynak kodun müşterinin web tarayıcısına gönderilmemesi gerektiği için), bu nedenle hiçbir yarı virgül sahibi olmamak daha güvenli görünüyor; bununla birlikte, bu kitaplardan, makalelerden ve videolardan öğrenen diğer geliştiriciler, ne yazık ki, sunucu tarafındaki JavaScript'in istemci tarafındaki JavaScript ile tamamen aynı olmadığı gerçeğini reddettiler.


Minifiers tek karakterli yeni satırlarda bırakabilir veya yarı-sütunlar boyut cezası olmadan mevcut olmadığında yarı-kolon ekleyebilirler. Bunu (eğer varsa) küçük düşürücülerin yaptığını bilmiyorum. Tehlike, en azından bazılarında hala var, bu yüzden amacınız hala pratikte duruyor.
outis

3

Onları içeride tutmak için iyi sebepler var.

Gerçekten isteğe bağlı değillerdir, JS bunları eksikken otomatik noktalı virgül ekleme ile geri ekleyebilir ancak bu aynı şey değildir.

Douglas Crockford'un JavaScript'i: İyi Parçalar, iki ayrı durumda bunun kötü bir fikir olduğunu söylüyor. Otomatik noktalı virgül ekleme, programınızdaki hataları gizleyebilir ve belirsizlik yaratır.

JSLint onaylamaz.


3

JavaScript’in, on yıldan fazla bir süredir ifadelerini sonlandırmak için noktalı virgüllere ihtiyacı olmadı. Bunun nedeni, yeni satır karakterlerinin deyim sonlandırıcıları olarak görülmesidir (bunun ECMAScript özelliklerinde de belirtildiğine inanıyorum). Özellikle çok anlamlıdır, özellikle JavaScript'in neden yarı-kolon kullanmaya ihtiyaç duyduğunu (Ruby ya da Python gibi diğer yorumlanmış dilbilgisi dillerinin kullanılmamasına ihtiyaç duyduğunu bilmiyorum) gerçekten iyi bir neden olmadığı için.

Noktalı virgül kullanmak, bir dil için ayrıştırıcı yazmayı kolaylaştırabilir, ancak her tercüman noktalı virgül kullanılmasını desteklediğinde, tam olarak nokta ne?

Bunun anlamı, bir programcının ne kadar bilgili olduğudur: noktalı virgül atlayabileceğinizi biliyorsanız, bir sonuç olabileceğini ya da olamayacağını anlamaktan çekinmeyin. İnsanlar karar verme makineleridir ve hemen hemen tüm kararlar biraz uzlaşma veya takas gerektirir. Sadece kodunuzun etrafına (ihtiyaç duyulmadığı yerlerde bile) yarı-sütun atma takası, kodunuzun daha az okunabilir hale gelmesi (kime sorduğunuza bağlı olarak) ve JSLint'in şikayet etmemesi (kimin umurunda olduğu) ). Öte yandan, noktalı virgüllerin atlanmasındaki takas, JavaScript programcılarının% 90'ının sizi bunun için cezbedeceği gerçeğidir, ancak bunun için JavaScript yazmayı daha çok zevklendirebilirsin.

Size daha iyi ne geliyor; bilinçli kararlar vermek veya kör karar verme / sürü zihniyetini kör etmek?


Bunun neden aşağı oy aldığını bilmek isterim. JavaScript ifadelerini sonlandırmak için noktalı virgül gerekmez; kesinlikle onları kullanabilir, ancak kesinlikle bir gereklilik değildir. Gerekirse, başka kimsenin açıklamaları işe yaramazdı. JavaScript uygulamasının tamamını noktalı virgül veya az noktalı yazarak yazabilmeniz gerçeği bunu göstermektedir. Bunun ötesinde, bir aracın nasıl çalıştığını anlama ve birinin kendi kararlarını almak için kendi akıl yürütme yöntemini kullanmanın bir şekilde "sadece yapmanın" aksine sakıncalı olduğunu görmüyorum. Din olarak bilinen şey budur.
Ravenstine,

Oy vermedim ancak sorun bunun yazılı olarak doğru olmadığı olabilir. Newlines, javascript'te deyim sonlandırıcılar olarak kabul edilmez. Noktalı virgülleri, belirli durumlarda ayrıştırma hatalarını otomatik olarak düzeltmesini sağlayan otomatik noktalı virgül ekleme adı verilen bir özellik nedeniyle bırakabilirsiniz. Noktalı virgül savunan insanlar, birçok javascript programcısının bu kuralı çok az anladığını düşünüyor. Göreviniz bu ışıkta lehine olan bir argüman gibi görünüyor. (Adalet, çoğunlukla
tezinize

@TimSeguine Evet, daha iyi bir anlayışa sahip olmadan önce bunu geri yazdım. İnsanların yaptıklarını tam olarak ne yaptığını anladıkları sürece noktalı virgül kullanmamanın hala nesnel olarak yanlış olduğunu düşünmüyorum. Görevimi yeniden düzenlemeliyim, belki de ondan kurtulmalıyım çünkü bu konuda yeterince fazla bilgi sahibi oldum. Kibar eleştiriler için teşekkürler! :)
Ravenstine

2

İki teorim var:

A)

Bu seçim ile ilgili mesele şu ki, JSLint vb. Uygulanabilir olduğunda, eski sözdizimi hatalarını yakalamak için büyük miktarda zaman harcamayı seçtiniz ya da kod üzerinde bir standartlar politikası uygulamak için makul bir süre seçtiniz.

Bununla birlikte, Birim Testine bağlı kod ve sürekli entegrasyona doğru ilerlerken , bir sözdizimi hatası yakalamak için gereken zaman miktarı (ve insan etkileşimi) büyük ölçüde azalmıştır. Testlerden alınan geri bildirimler, kodunuzun bir son kullanıcıya yaklaşmadan hemen önce beklendiği gibi çalışıp çalışmadığını hızlı bir şekilde gösterecektir, öyleyse neden isteğe bağlı ayrıntılandırma ekleyerek zaman kaybettiniz?

B)

Tembel programcılar kısa vadede kendi hayatlarını kolaylaştırmak için her şeyi yaparlar. Daha az yazma -> daha az çaba -> daha kolay. (ayrıca, noktalı virgül kullanmak zorunda kalmamak, sağ taraftaki parmağınızı sıkıştırmaktan ve bazı RSI'lerden kaçınmaktan kaçınır).

(NB Ben bir ifadeyi küçümseyen bir şeyi atlamak fikrine katılmıyorum ).


1
jshint hala önemli bir araçtır.
Raynos

Bir açıklama daha belirgin hale getirmek için olduğu gibi, her ikisi \nve ;\naynı
Raynos

2
@Raynos Aslında, JSLint'in sıklıkla çalıştığım çerçeve ağırlıklı kodların bazılarının karmaşıklığı konusunda biraz yararsız olma eğiliminde olduğunu buldum. Artı,; \ n ve \ n her koşulda aynı değildir , aksi halde;
Ed James

7
jslint yararsızdır, ancak jshint farklı bir araçtır.
Raynos

0

Onları dışarıda bırakmıyorum, ancak ne zaman ekleyeceğimi kuralları değiştiriyorum.

Çoğu insanın kullandığı kurallar

  • Her satır bitmeden önce
  • Satır }bir işlev ifadesinden gelenle biterse
  • Ancak sadece bir işlev ifadesi, bir işlev değişmezine atanma

Benim kuralım: Açılan ayraç / ayraçla başlayan her bir satırın başında.

Maden daha basittir, bu nedenle takip etmesi daha kolay ve böceklerden daha az eğilimlidir. Ayrıca düşük noktalı virgül sayısı, dışarıda bırakılarak yapılan hataları bulmayı kolaylaştırır.


Başka bir argüman, rezil return\nvalueböceğin ASI'yi bilmemesinden kaynaklanıyor. Kuralım sizi ASI hakkında bilgi edinmeye zorlar; bu nedenle kuralımı kullanan kişilerin bu hatanın tuzağına düşme olasılığı daha düşüktür.


0

Bayt sayısı Kötü niyetli insanlar genellikle tek bir kod satırına sığmaya çalışırlar. Teknik olarak konuşursak, bu yarı-kolon olmadan mümkün olmazdı. Benim varsayımım, bunun programlı bir gereklilikten çok bir güvenlik önlemi olduğudur. Her nasılsa, bu bir öneriden ziyade bir gereklilik haline geldiğinde XSS'yi önemli ölçüde azaltacaktı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.