Şöyle basit bir soru gelsin: 1'den 10'a kadar sayıların faktöryellerini basan program yazınız. Perl 6 'da tek satırda yazılıyor. < Resime gitmek için tıklayın > Gördüğünüz gibi okunaklı ve açıklamalı tek satır. Perl 7 çıkıp tek satır değil de, 0 satırda yazılmasını mı bekliyordun ![]() Bu soruyu şu senin hızlı GOnzalez ile kaç satırda yazılabildiğini de görmek isteriz ![]() |
|
Go ile tek satırda yazabilir misin diye sormadım ki? Sadece kaç satırda yazabilirsin diye sordum. Perl 'i eleştirmene gelince. Perl 5'i dahi bilmeden, Perl 6'yı hiç bilmeden "Perl 7 çıkarsa" yı konuşmak eleştirmek değil, başka birşey. Perl 6 süper bir dil demedim, sadece fonksiyonel özellikleri sayesinde karışık programlar cok daha kısa ve net yazılabiliyor dedim, ve temel / orta düzey programcılık sorularını coğu kez tek satırda kodlayarak bunun demosunu yaptım, süper dil diye birşey yok. Perl'in gerçek hayatta başarılı projelerde kullanıldığını inş görürüz demişsin, Perl birçok başarılı projede zaten kullanılıyor. Örnek ister misin. Amazon :) Docker hiç kullanmadım cunku gereksiz. Ancak ilerde bir proje sahibi kullanmamı isterse kullanırım o ayrı. |
|
Yaz o halde. 10 veya başka satır görelim. Amazon Ekim 1994 'te Perl 5 ile geliştirildi ve hala Perl 5 kullanıyor cunku Perl 6'ya terfi ettiğine dair hiçbir haber görmedim. Fakat Perl 5 te, Perl 6'da denenen bazı özellikler eklenerek iyileştirmeler yapıldığı için büyük firmalar dahil versiyon güncellemesi o kadar şart değil. |
|
1 dakikada 1 milyon ziyaretçi türünde problemler cok az sayıda firma ve kişiyi sadece bazı dönemlerde ilgilendirir ve sorun coğu kez cok basit fakat isabetli değişiklilerle çözülebilir. Ona bakarsan ben de sunucu işletiyorum trafiği yoğun değil fakat yine de RAM'de şişme yapıyordu, bir baktım Apache httpd 10+ proses açmış, ihtiyac kalmayınca prosesleri kapatmamış, prosesler başıboş çalışıp CPU harcıyor. Apache 'nin son sürümüne terfi edebilirdim fakat Nginx'in o konuda cok iyi old biliyordum, Apache'yi tümüyle kaldırıp Nginx'e geçtim bir daha hiç öyle sorun yaşamadım. Bu forum örneğin .NET olmasına ragmen Nginx kullanıyor, birçok yoğun trafikli site hep Nginx kullanıyor. Daha da zorlu durumlar için NodeJS kullanılıyor. Yoğun sunucu trafiği problemi artık birçok platformda çözüldü. Yani Go'nun o açıdan sorun çözmesinin o kadar büyük esprisi yok. Konumuz temel / orta düzeyde programlama sorularını en kısa şekilde çözmek ki buradaki amaç yeni fonksiyonel programlama tekniklerini kullanmak. Go'da bu teknikler ne kadar kullanılıyor, önemli olan bu. C++17 'ye örneğin yeni fonksiyonel özellikler eklenmiş, kullanılıyor, o sayede örneğin 1'den 10'a kadar sayıların faktöryelini C++17 ile hazır factorial fonksiyonu kullanmadan cok satır tutmayacak şekilde kodlayabilirim. |
|
go ile bunu yazdırmak saniye sürmüyor. consola yazdırmak dahil yaklaşık 200 ms başlangıç zamanı : 2019-10-07 10:38:40.0176805 bitiş zamanı : 2019-10-07 10:38:40.2355538 kodu ben yazmadım. internetden hazır buldum. recursive fonksiyon kullanarak yapılmış. ancak recursive fonksiyon lar go da tavsiye edilmiyor. Iterative versiyonu yapılırsa daha da hızlanabilir |
Kodu çalıştırma hızı değil, 1-10 arası sayıların faktöryelini hesaplayan kod ne kadar pratik, bu önemli. Ayrıca diyelim ki hız Go ile 200ms, C++ ile 100ms çıktı bunun önemi yok cunku önemli olan bu kodların makina koduna derlenmesi yani arada JRE veya CLR gibi ara işleyici gerekmemesi. Düşünsen ürettiğin exeyi biri bilgisayarında direkt çalıştırabilecek. Raku (eski adıyla Perl 6) ve Java 8'de ürettiğim kodu herkes direkt çalıştıramaz. |
1-10 arası faktöryel hesaplamaya için cevap vermedim. 1 milyonuncu Fibonacci için cevap verdim. kod kısa değil. go burada consola yazmada sorun çıkarmadığı için bilgilendirmek istedim. |
Kodun kendisini görmeden sadece yorumu görünce 1-10 arası faktöryel sorusu üzerine yorum sandım. 1-10 arası sayıları, yerleşik math , faktöryel işlevi kullanmadan, fonsiyonel olarak faktöryelini hesaplayan C++17 kodu. 9 satır ve cok kasmadan 9 satır. Şimdi aynı işlemi Go ile yap, kod gönder inceleyelim ve karşılaştıralım: < Resime gitmek için tıklayın > |
go ile sadece 5 satır, kodu online test etmek için link https://play.golang.org/p/GnnzSvQXRHO < Resime gitmek için tıklayın > |
klasik for döngüleri kullanarak yapılacaksa C++'ta 3 satır :) < Resime gitmek için tıklayın > Klasik for döngüsü ile yapılamayacak ve fonksiyonel programlamayı zorlayacak bir soru düşüneyim şimdi... Bu arada benim bilgisayarda Go compiler var; online compiler kullanmama gerek yok. |
sort veya is_sorted gibi yerleşik fonksiyon kullanmadan şu serilerin elemanlarının artan ve sadece artan (eşit rakamlar artan sayılmayacak) olduğunu kontrol eden kod yazınız. C++ ile 14 satırda yazdım. Perl 6 ile 2 satır, biraz kasarsam belki tek satırda yazabilirim.
|
a=input().split(",") c=1 for i in range(len(a)-2): c=[c,0][int(a[i ])>=int(a[i+1])] print(c) python pek kullanmam anca bu kadar. |
< Bu mesaj bu kişi tarafından değiştirildi CleanCoders -- 30 Eylül 2019; 10:14:59 >
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @vonderplanitz