diff --git a/README.md b/README.md index e62e778..405f30f 100644 --- a/README.md +++ b/README.md @@ -185,7 +185,7 @@ edeceğinizden dolayı tonlarca teste maruz kalabilirsiniz. Bir veya iki argüman normal olan durumdur, mümkün olduğunca üçüncüden kaçınılmadılır. Bundan daha fazla olanlar iyileştirilmelidir. Eğer fonksiyonunuz ikiden fazla argüman alıyorsa, muhtemelen yapması gerekenden fazla işi yapmaya çalışıyordur. -Daha fazla argümana ihtiyacınız olduğunuz durumlarda daha kapsamlı bir nesne +Daha fazla argümana ihtiyacınız olduğu durumlarda daha kapsamlı bir nesne kullanmak yeterli olacaktır. Javascript size anında nesne oluşturma kabiliyetini verdiğinden dolayı, daha fazla @@ -227,7 +227,7 @@ menuOlustur({ ### Fonksiyonlar Tek Bir Şey Yapmalı -Bu yazılım mühendisliğinde en önemli kuraldır. Fonksiyonlar birden fazla iş yaptığında, onları düzenlemek, test etmek ve hakkında fikir sahibi olmak oldukça zorlaşır. Bir fonksiyonu izole ettiğinizde, daha kolay refactor edilebilir ve daha temiz, okunabilir bir kod haline gelir. Bu kılavuzdan aldığınız tek bilgi bu olsa bile birçok geliştiricinin önde olacaksınız. +Bu yazılım mühendisliğinde en önemli kuraldır. Fonksiyonlar birden fazla iş yaptığında, onları düzenlemek, test etmek ve hakkında fikir sahibi olmak oldukça zorlaşır. Bir fonksiyonu izole ettiğinizde, daha kolay refactor edilebilir ve daha temiz, okunabilir bir kod haline gelir. Bu kılavuzdan aldığınız tek bilgi bu olsa bile birçok geliştiricinin önünde olacaksınız. **Kötü:** ```javascript @@ -503,48 +503,49 @@ function geciciDosyaOlustur(isim) { ``` **[⬆ en başa dön](#içindekiler)** -### Avoid Side Effects (part 1) -A function produces a side effect if it does anything other than take a value in -and return another value or values. A side effect could be writing to a file, -modifying some global variable, or accidentally wiring all your money to a -stranger. +### Yan Etkilerden Kaçının (Kısım 1) -Now, you do need to have side effects in a program on occasion. Like the previous -example, you might need to write to a file. What you want to do is to -centralize where you are doing this. Don't have several functions and classes -that write to a particular file. Have one service that does it. One and only one. +Bir fonksiyon, değer alıp başka değer veya değerler döndürmek dışında +bir şey yapıyorsa yan etki oluşturur. Bu yan etki, dosyalara bir şeyler yazmak, +bazı global değişkenleri değiştirmek, güncellemek veya yanlışlıkla bütün paranızı bir +yabancıya aktarmak olabilir. -The main point is to avoid common pitfalls like sharing state between objects -without any structure, using mutable data types that can be written to by anything, -and not centralizing where your side effects occur. If you can do this, you will -be happier than the vast majority of other programmers. +Zaman zaman yazdığınız programda yan etkilerin olması gerekir. Mesela, bir önceki +örnekte işlenildiği gibi dosyalara bir şeyler yazmanız gerekebilir. Yapmanız gereken şey ise +yan etki oluşturan işlemleri yaptığınız yeri merkezileştirmektir. Örneğin belirli bir dosya üzerinde +işlem yapan birkaç fonksiyon veya sınıfınız olmasın. Sadece bir servis bunu yapsın. Evet, sadece bir servis. + +Buradaki ana fikir, herhangi bir yapıya sahip olmayan nesneler arasındaki stateleri paylaşmak, +herhangi bir şey tarafından değiştirilebilir veri tiplerini kullanmak veya yan etkilerin oluştuğu +yerleri merkezileştirmemek gibi yaygın hatalardan kaçınmaktır. Eğer bunları yapabilirseniz, +diğer programcıların büyük bir çoğunluğundan daha mutlu olacaksınız. **Kötü:** ```javascript // Global variable referenced by following function. // If we had another function that used this name, now it'd be an array and it could break it. -let name = 'Ryan McDermott'; +let isim = 'Ali Veli'; -function splitIntoFirstAndLastName() { - name = name.split(' '); +function isimVeSoyismiAyir() { + isim = isim.split(' '); } -splitIntoFirstAndLastName(); +isimVeSoyismiAyir(); -console.log(name); // ['Ryan', 'McDermott']; +console.log(isim); // ['Ali', 'Veli']; ``` **İyi:** ```javascript -function splitIntoFirstAndLastName(name) { - return name.split(' '); +function isimVeSoyismiAyir(isim) { + return isim.split(' '); } -const name = 'Ryan McDermott'; -const newName = splitIntoFirstAndLastName(name); +const isim = 'Ali Veli'; +const yeniIsim = isimVeSoyismiAyir(isim); -console.log(name); // 'Ryan McDermott'; -console.log(newName); // ['Ryan', 'McDermott']; +console.log(isim); // 'Ali Veli'; +console.log(yeniIsim); // ['Ali', 'Veli']; ``` **[⬆ en başa dön](#içindekiler)** @@ -1947,6 +1948,76 @@ degerlendirme.performansDegerlendirmesi(); **[⬆ en başa dön](#içindekiler)** +### Javascript Dökümantasyon Kurallarına uyulmalı. +DocBlock sayesinde uygulamalarımızdaki fonksiyonlar, methodlar, sınıflar, modeller ve kontrollerin işlevlerini, değişkenlerini, geri dönüş değerlerini hatırlamamızı ve/veya kullandığımız IDElerde fonksiyonlar hakkında hızlı bilgilendirmeler almak için mutlaka öncelik verilmesi gerekiyor. Ayrıca yorum satırlarında yapılması gereken notlarımızı TODO: şeklinde tanımlamalar yaparsak en son eksik kalan yerleri hızlı hatırlamamıza yardımcı olabilir. + +**Kötü:** +```javascript +function FaizHesapla(Anapara,Gun,YillikOran,StopajOrani){ + faiz=((Anapara*Gun*YillikOran)/36500)*(1-(StopajOrani/100)); + return faiz; +} +function FonGetiri(Anapara,Gun,FonOrani){ + //var Gun=((sonTarih-ilkTarih)/(1000*60*60*24)); hücre içerisinde "01.01.2019" olunca çalışmıyor + // tarih olan hücre seçildiğinde bu çalışmaktadır. ilerleyen günlerde google sheets script + // araştırma yapılacak + fon=(Anapara*(Gun)*(FonOrani/100)); + return fon; +} +``` + +**İyi:** +```javascript +/** +* Nakit Akışı Sınıfı. +* +* @fileOverview Nakit Akışında Kullanılan Özel Fonksiyonlar Mevcuttur. +* @author Sezgin BULUT +* @version 1.0.1 +*/ + +/** +* Vadeli Hesap Net Faiz Hesaplama +* +* @link https://www.yapikredi.com.tr/bireysel-bankacilik/mevduat-urunleri/mevduat-stopaj-oranlari +* +* Bu formül parametre olarak iletilen tutarın Net Faizini geri döndürür +* @param {100.000,00} Anapara Anapara Tutarı Yazılacak +* @param {5} Gun Gün Yazılacak +* @param {17,25} YillikOran Yıllık Faiz Oranı Yazılacak +* @param {15} StopajOrani Mevduat Stopaj Oranı Yazılacak +* @return +* @customfunction +*/ + +function FaizHesapla(Anapara,Gun,YillikOran,StopajOrani){ + faiz=((Anapara*Gun*YillikOran)/36500)*(1-(StopajOrani/100)); + return faiz; +} + +/** +* Fon Hesaplama +* +* @link https://www.yapikredi.com.tr/yatirimci-kosesi/fon-bilgileri +* +* Bu formül parametre olarak iletilen tutarın Net Fon Gelirini geri döndürür +* @param {1.000,00} Anapara Anapara Tutarı Yazılacak +* @param {5} Gun Gün Yazılacak +* @param {0,04} FonOrani Günlük Fon Getiri Oranı Yazılacak +* @return +* @customfunction +*/ + +function FonGetiri(Anapara,Gun,FonOrani){ + // TODO: var Gun=((sonTarih-ilkTarih)/(1000*60*60*24)); hücre içerisinde "01.01.2019" olunca çalışmıyor + // TODO: tarih olan hücre seçildiğinde bu çalışmaktadır. ilerleyen günlerde google sheets script araştırma yapılacak + fon=(Anapara*(Gun)*(FonOrani/100)); + return fon; +} + +``` +**[⬆ en başa dön](#içindekiler)** + ## **Yorumlar** ### Sadece iş mantığının karmaşık olduğu durumlarda yorumları kullanın. Yorumlar lükstür, zorunlu değildir. İyi kod *çoğunlukla* kendini belli eder.