final def foreach(f: (A) ⇒ Unit): Unit
veya
final def map[B](f: (A) ⇒ B): SomeCollectionClass[B]
ile yapılabilir
myCollection.foreach { element =>
doStuffWithElement(element);
}
myCollection.map { element =>
doStuffWithElement(element);
}
: bir son kullanıcı açısından mümkün tembel haritalama (*), haricinde
, ben bu çağrılardan sıfır farklılıkları görmekverilen harita çıktılarını görmezden gelebilirim. foreach
'un tüm işlevselliğini içerdiği düşünüldüğünde iki farklı yöntemin neden olması gerektiğine dair belirli bir neden düşünemiyorum ve aslında bir intelligent derleyici & VM çalışmıyorsa oldukça etkilendim Herhangi bir şeye atanmamış, okunmamış veya herhangi bir yerde kullanılmadığı düşünüldüğünde, koleksiyon nesnesinin oluşturulmasını optimize edin.
Öyleyse, soru - doğru muyum - ve foreach
'u birinin kodunda herhangi bir yere aramak için bir neden yok mu?
Notlar:
(*) tembel haritalama kavramı, as throughly illustrated in this question, işleri biraz değiştirip foreach
kullanımını haklı, ama bildiğim kadarıyla gördüğünüz gibi, bir spesifik bir LazyMap
takılmaları gerekiyor olabilir, Normal
(**) daha sonra bir hızla for
anlama sözdizimi sözdizimi üreten bir sözdizimi şeker aslında olmasından denk olur, tek bir koleksiyon kullanmayan , ama bir yazma halinde tek for
sözdizimi ile ilgili koleksiyon sınıfını kullanan diğer insanlara değer veriyor ise
for (element <- myCollection) { doStuffWithElement(element); }
myCollection.foreach { element => doStuffWithElement(element); }
Yani, biri hala foreach
yöntemi uygulamak isteyebilirsiniz: "foreach" çağrısı, yani bu iki satır tamamen eşdeğer kodu oluşturmak.
Yan etki ve yan etki oluşturma işlevleri arasında ayrım yapmak için 'map' yerine 'foreach' kullanmak çok güzel. Derleyici diğeri için optimize ederse umurumda değil. Fark, kodun amacını daha açık hale getirir. –
Bir adım daha ileri gitmek için LimbSoup, '' for .. 'yerine' for .. '(sans verimi) yerine '' foreach '' i kullanmayı tercih ederim (bana göre) iterasyon * için * yan etkiler ve bir dönüşüm arasındaki ayrımı gösterir. dizi için. Ayrıca, yinelenen dizinin tembel olmadığını varsaymak tehlikeli olabilir. – user2864740
Aksine, eğer mevcut Scala derleyicisi ve/veya JVM, eğer sonuç kullanılmazsa, 'map'' foreach' koduna göre optimize edebilecekse, * I * çok etkilenir. Bu bana bir ** aşırı ** önemsiz olmayan optimizasyon olarak görünüyor. – ziggystar