Scala ifadelerini sınırlamak için noktalı virgül kullanmalı mıyım?


9

Java noktalı virgülle ifadeleri sınırlamak için alışkınım, bu yüzden doğal olarak Scala kodunda da yaparım. Kodun okunmasının daha kolay olduğunu hissediyorum, çünkü bir ifadenin bittiği ve diğerinin başladığı açıktır. Ama SO üzerine bir parça Scala kodu gönderdiğimde, kod sadece noktalı virgüllerin kaldırılması için düzenlenir.

  1. Noktalı virgül kullanmalı mıyım, kullanmamalı mıyım? Herhangi bir "resmi" yönerge veya kodlama tarzı var mı?
  2. Noktalı virgüllerin gerekli olduğu durumlar var mı, yoksa kod belirsiz mi?

5
Haskell sana hiçbir şey öğretmedi mi? ; P gereksiz sözdizimini kaldırır, noktalı virgüller yalnızca aynı satırda birden fazla cümle / ifade ayırmak için kullanılmalıdır
Jimmy Hoffa

@JimmyHoffa Haskell bana sözdiziminin güzel ve tutarlı olması gerektiğini öğretti :).
Petr Pudlák

2
Bunun ilk kısmı Scala parçacıklarını her gördüğümde sinirlenmemizin nedeni ...
Jimmy Hoffa

Yanıtlar:


9

Bunu yapmak için resmi olarak "doğru" bir yol yoktur, ancak çoğu uygulayıcı, noktalı virgülleri ellerinden geldiği her yerde atlar (bu yüzden pek çok kişi noktalı virgülleri refleks olarak çıkarır).

Dil, ifadeleri sonlandırma gereğini unutturmak için çok uğraşmaktadır. Ne yazık ki, değil oldukça böylece noktalı virgül veya bir parantez ekstra seti veya benzeri "ipuçları" istenmeyen semantiğini kaçınmak için gerekli olduğu çeşitli karmaşık durumlar vardır, başarılı. Böyle durumlar neredeyse normalde onlar hakkında düşünmek zorunda kalmamasıdır nadir yeter. Görüşler, bunun savunmacı bir şekilde noktalama (bu benim düşündüğüm) veya sorunla karşılaşana kadar asla noktalama (yani kullanıcıların çoğunluğunun düşündüğü şey) anlamına gelmesi anlamına gelir. Nihayetinde, bir dönüm noktası mı yoksa örnek bir vatandaş olarak mı tanımlanacağınıza kendiniz gelirsiniz.


Teşekkürler, bu tür karmaşık durumlara bir örnek (ya da birkaç :)) verebilir misiniz?
Petr Pudlák

3
Bunu sormamdan korktum ... Scala'da programlama beni şaşırtan birkaç tanesini listeliyor, ama şu anda yanımda bir kitap yok ve detayları unutuyorum. Yapmaya çalıştığım nokta bu: Bu istisnai durumları hatırlayabilseydim, o kadar da kötü olmazdı, ama olduğu gibi, noktalı virgülü gerçekten atlayıp atlayamayacağımdan emin değilim - bu yüzden yapmıyorum.
Kilian Foth

Huh. Bir zamanlar Scala'da noktalı virgül eksik olmanın bana zarar verdiği bir durumla karşılaşmadım. Onları asla dahil etmem . Scala'yı sadece hobi benzeri şeyler için programladım, bu yüzden belki er ya da geç beni ısıracaktır.
KChaloux

4

Kullandığınız dilleri ne kadar anlamak istiyorsunuz? Güçlü yönleriyle oynamak ister misin? Scala'nın sözdizimi açık ve özlü kodu teşvik eder; bundan faydalanmanın Scala ayrıştırıcısı için sorunlara yol açtığı birkaç son durum öğretici (yani, onlarla karşılaşıp onları nasıl önleyeceğinizi öğrenerek Scala hakkında daha fazla bilgi edinirsiniz) ve yavaş yavaş sabitlenir (örneğin, son ek gösterimi ). Yarı kolonun savunmacı bir şekilde kullanılması, bu konular hakkında hiçbir zaman öğrenmek zorunda kalmayacağınız anlamına gelebilir, ancak bunu gerçekten iyi bir şey olarak görüyor musunuz? Bu sorunların düzeltilmesinin genellikle başka etkileri vardır, ancak bu olasılıkları kaçıracaksınız.

Bir başka husus, Kilian'ın kabul ettiği gibi, çoğu Scala geliştiricisinin varsayılan olarak yarı-sütunu atlamasıdır. İdiyomatik Scala'yı kendiniz kullanmaktan kaçınırsanız, başkalarının kodlarıyla nasıl çalışmayı beklersiniz? Gerekenden çok daha zor bulacaksınız.

Scala ayrıştırıcısının bu özelliklerinin temiz, yeniden kullanılabilir ve işlevsel (fp anlamda) kodunu teşvik etmek için seçildiğine yeterince vurgu yapamam. Örnek olarak infix operatörü sözdizimini ele alalım; geliştiricileri sınıfları birlikte iyi oluşturan basit, tek amaçlı yöntemlerle sunmaya teşvik eder. Scala'nın koleksiyon kütüphanesi bunun ne kadar güzel çalışabileceğini gösteriyor. Bunu benimseyen klasik olarak eğitilmiş Java geliştiricileri, kodları hakkında daha iyi alışkanlıklar ve yeni düşünme yolları geliştirme eğilimindedir. Tüm bu tanıdık noktalara ve köşeli parantezlere sadık kalanlar kaçıracak. Bunun yarı-kolondan vazgeçemeyecek kadar çekingen olanlar için de geçerli olduğunu iddia ediyorum.


8
-1 evet, derleyici gotchas nedeniyle dili öğrenmek için "zorla" olmak C ++ ile stil dışına çıktı. Ayrıca, bu tür önyargılı bir tonla cevap vermek istediğim iddiaların arkasında çok az kanıt var.
Telastyn

(1) @Telastyn ne dedi - eğer gerçekten bu şekilde bir dil öğrenmek istiyorsanız, bir kedi edinin, klavyede oturmayı seviyorlar, çünkü eğitiminize önem veriyorlar. (2) Noktalı virgüllerin ihmal edilmesinin temiz stille ilgisi yoktur veya onu teşvik eder - eğer bir şey varsa, noktalı virgül bırakmak, bunların sıralı olarak yürütülen ve muhtemelen yan etkileri olan ayrı ifadeler olduğu gerçeğini gizliyor . Noktalı virgülleri bırakmak, bunun farkında olmanızı sağlar ve bu nedenle daha işlevsel bir stili tercih eder. Bu nedenle karar tamamen sözdizimseldir (örneğin stil, ayrıştırma, vb.).
Eli Barzilay

"Dili öğrenmeye zorlanan" uçmasa da, "dili yazarlarının istediği gibi kullanmak" ve "çoğu geliştiricinin kullandığı gibi" önemli referans noktalarıdır. Birden çok geliştirici arasında tutarlı bir stilin korunması yararlıdır. Hem bu cevaptan hem de @Killan Foth'tan, koruyucular ve çoğu geliştiriciler görünüşte noktalı virgülü yabancı olarak görüyorlar.
Sarah Messer
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.