"Merhaba Amigo! Bugün size kod stillerinden ve kod stilinin öneminden bahsedeceğim."

"En önemli olanla başlayacağım.  Java kodunun okunması kolay olmalıdır.  Koda genel yaklaşım şudur: kod bir kez yazılır ama yüz kez okunur."

"Sizin ve diğer 10 programcının bir uygulama yazdığınızı varsayalım. Uygulama üzerinde üç yıl boyunca çalışıyorsunuz ve ara sürümler her üç ayda bir."

"O kadar uzun?"

"Bu benim genç çekirgem Java! "Bir düzine sunucu üzerinde çalışan ve 6 yılı aşkın süredir 100 kişi tarafından yazılmış bir kurumsal sisteme ne dersiniz? Bu da bazen oluyor."

"Vay."

"Her neyse, ana kural, kodun ana gereksinimi, diğer geliştiricilerin okuması kolay olmalıdır."

"Diğer programlama dillerinde, insanlar genellikle küçük görevler üzerinde küçük ekipler olarak çalışırlar, bu nedenle 'Çalışıyor mu? Mükemmel' gibi başka bir ana kuralı olabilir."

"Birkaç yıl içinde, tüm ekip üyeleriniz yazdığınız kodda birkaç değişiklik yapacak. Ve her seferinde kodun nasıl çalıştığını anlamaları gerekecek."

"Ve mükemmel çalışan anlaşılmaz kodu değiştirmek zordur.  Onu atarlar ve kendi yöntemleriyle yeniden yazarlar.  Bu nedenle, başkalarının anlayabileceği bir kod yazın.  Kodunuzu geliştirebiliyorsanız, geliştirin. Geliştirilebilirse, o zaman iyileştirilmesi gerekiyor! "

"15 dakika boyunca kod yazarsanız ve ardından onu geliştirmek için iki saat harcarsanız, doğru yapıyorsunuz demektir. Ekibe ne kadar zaman kazandırıyorsunuz?"

"'Kodunuzu anlamak için 2 saat' x 'insanların kodu anlaması gereken 100 kez' = 200 saat."

"Bu rakamları yoktan var ettim ama sorunu ve kapsamını anlamanı istiyorum.  Kodun diğer programcılar tarafından okunmak için yaratıldı.  Geri kalan her şey ikincil."

"Kod düzgün çalışmıyor mu? Düzelteceğiz. Optimize edilmedi mi? Optimize edeceğiz. Belgelenmedi mi? Yorum ekleyeceğiz."

" Kodu okumak zor mu? O saçmalığı çöpe at ve her şeyi sıfırdan yeniden yaz! "

"Bunun o kadar önemli olduğunu düşünmemiştim."

"Java'nın önde gelen bir programlama dili olmasının nedenlerinden biri, tüm Java kodunun diğer programcılar tarafından okunmak üzere yazılmasıdır."

"Şimdi ikinci soruya geçelim: Kodunuzu mümkün olduğunca okunması kolay hale nasıl getirirsiniz? "

"Birisi kendi ana dilinde tanıdık kelimeler konuştuğunda bunu herkes anlayabilir. Aynısı burada da geçerli. Bir programcı kolayca tahmin edebildiğinde kodu okumak kolaydır:

A)  Her yöntemin yaptığı şey

B)  Her sınıfın amacı

C)  Tam olarak her değişkenin sakladığı şey.

Tüm bunlar isimlerle iletilir: sınıf isimleri, yöntem isimleri ve değişken isimleri. Ek olarak, değişkenleri adlandırma söz konusu olduğunda bir stil vardır. Ve kod stili var."

"Dinlemeye hazırım."

" Programlama, iyi İngilizceye dayalıdır!  İyi yazılmış bir program, sıradan teknik belgeler gibi okunur. "

" İsimlerle başlayalım. "

"Bir yöntem adı, yöntemin ne yaptığını kısaca açıklamalıdır. Ardından kod, basit düzyazı gibi okunabilir."

programı
public String downloadPhoto(String url)
{
 String resultFileName = TempHelper.createTempFileName();

 Downloader downloader = new SingleFileDownloader(new Url(url));
 downloader.setResultFileName(resultFileName)
 downloader.start();
 while(downloader.isDone())
 {
  Thread.sleep(1000);
 }

 if (downloader.hasError())
  return null;

 return resultFileName;
}

"İşte böyle bir program nasıl okunur."

Satır 1.

"Yöntemin adı 'downloadPhoto'. Görünüşe göre internetten bir fotoğraf dosyası indiriyor. Nereye indiriyor? Henüz bilmiyoruz. Nereden? Yöntemin url adında bir parametresi var — muhtemelen fotoğrafın URL'si bu. İndirmek."

3. satır

"Sonuç DosyaAdı değişkeni, TempHelper.createTempFileName() tarafından bildirildi ve bir değer atandı;"

Bu, indirilen dosyamızı kaydedeceğimiz dosyanın yerel yolu olmalıdır.

"'TempHelper' adı bize hiçbir şey söylemiyor. 'Helper' soneki, bunun önemli iş mantığı içermeyen bir tür yardımcı sınıf olduğunu, bunun yerine sık sık meydana gelen rutin görevleri basitleştirmek için kullanıldığını söylüyor."

"'createTempFileName' yöntem adı, bu yöntemin geçici bir dosya (geçici dosya) oluşturduğunu ve adını döndürdüğünü belirtir. Geçici dosya, bir süre için oluşturulan ve ardından genellikle program kapatıldığında silinen geçici bir dosyadır. "

5. satır

"Bir SingleFileDownloader nesnesi oluşturulur ve indirici değişkenine atanır."

Bu, dosyamızı internetten indirecek olan nesnedir.

"İndirici değişkenine bir SingleFileDownloader nesnesi atanır. Adından, programın birkaç türde indirici sınıfı olduğunu varsayabiliriz. Biri, tek dosyaları indirmek için yazılmıştır ve muhtemelen gruplar için kodda başka indiricilerle karşılaşmayı bekleyebiliriz. "MultiFileDownloader, FileGroupDownloader veya DirectoryDownloader" gibi adlara sahip dosyalar

6. satır

"İndirici nesnenin resultFileName özelliğini, resultFileName değişkeninin değerine eşit olarak ayarladık. Diğer bir deyişle, yükleyiciye indirilen dosyayı nereye kaydedeceğini söylüyoruz. Beklediğiniz gibi. Yani, temelde kodu tahmin ediyoruz!"

7. satır

"Başlat yöntemini diyoruz. İndirme başlıyor. Bu mantıklı. İndirmenin nasıl gerçekleştiğini merak ediyorum: parçalar halinde, ayrı bir iş parçacığında mı yoksa tamamı burada mı? Tamamını burada indirirsek, biraz zaman alabilir. uzun zaman ve sonuçları var."

Satır 8-11.

"Ah. Burada indirme işleminin bitmesini bekleyen biri tarafından yazılan standart döngüyü görüyoruz. Downloder nesnesi, isDone() yöntemi tarafından döndürülen bir done özelliğine sahiptir. Çünkü yöntem, getDone() yerine isDone() olarak adlandırılır. ), yapılan değişkenin bir boolean veya belki de bir Boolean olduğu sonucuna varıyoruz."

Satır 13-14.

"İndirme sırasında bir hata oluşursa, downloadPhoto yöntemi null değerini döndürür. Hataları işlemesi iyidir. Yalnızca null değerini döndürmesi kötüdür; hatanın ne olduğu açık değildir. Hakkında bilgi içeren bir istisna atmak daha iyi olur hata."

Satır 16.

"İndirilen dosyayı içeren yerel dosyanın yolunu döndürüyoruz."

"Vay!"

"Bu programın kodu, ne işe yaradığını kesinlikle netleştiriyor. Hatta programın nasıl organize edildiği ve başka hangi sınıfları/yöntemleri bulacağımız hakkında tahminlerde bulunabilirsiniz."

"Artık isimlerin ne kadar önemli olduğunu anlıyorum."

"Adlar hakkında daha fazla bilgi. Genellikle bir nesnenin/sınıfın hangi yöntemlere sahip olduğunu tahmin edebilirsiniz. Örneğin, bir nesne bir koleksiyonsa, o zaman büyük olasılıkla öğe sayısını almak için size() veya count() yöntemine sahip olacaktır. Ayrıca , muhtemelen bir add() veya insert() yöntemine sahip olacaktır. Öğeler, get/getItem/getElement yöntemleri kullanılarak koleksiyon sınıflarından alınır."

"Bir değişken i, j veya k olarak adlandırılırsa, büyük olasılıkla bir döngü sayacıdır."

"Bir değişken m veya n olarak adlandırılırsa, büyük olasılıkla bir dizinin/koleksiyonun boyutudur."

"Bir değişkene ad deniyorsa, büyük ihtimalle birinin adını içeren bir Dizedir."

"Bir sınıfın adı FileInputStream ise, aynı anda bir dosya ve bir giriş akışıdır."

"Ne kadar çok kod görürseniz, başkalarının kodunu okumak o kadar kolay olur."

"Ancak bazen okunması çok zor olan kodlar vardır. Bu durumda işte size çok pratik bir tavsiye:"

Kodu , nerede yaşadığınızı bilen şiddet yanlısı bir psikopat tarafından korunacakmış gibi yazın .

"Bu hem komik hem de komik değil."

"Şimdi değişkenleri adlandırmak için kullanılan stiller hakkında biraz."

"Java geliştiricileri, değişkenlere ve yöntemlere oldukça bilgilendirici adlar vermeye çalışır. Sonuç olarak, adlar genellikle birkaç kelimeden oluşur. Bileşik adların büyük harf kullanımı için 4 stil vardır."

1) Küçük Harf  – Tüm kelimeler küçük harflerle yazılır. Örneğin:

'Sera', 'sera'  oluyor

'Hollywood kızı', 'hollywood kızı'  oluyor 

Bu stil, paket adları için kullanılır.

2) Büyük Harf  – Tüm kelimeler büyük harflerle yazılır ve alt çizgi ile ayrılır. Örneğin:

"Maks. değer", MAX_VALUE  olur

"Kedi sayısı" CAT_COUNT  olur

"Bu stil, sabitlerin adları için kullanılır (son statik alanlar)."

3) CamelCase  – Her kelimenin ilk harfinin büyük olması dışında tüm kelimeler küçük harflerle yazılır. Örneğin:

'Yeşil ev', 'Sera'  oluyor 

'Hollywood kızı', 'HollywoodGirl'  oluyor

Bu stil, sınıfların ve arabirimlerin adları için kullanılır.

4) Küçük Deve Harfi (karma harf)  – İlk harf hariç her kelimenin ilk harfinin büyük olması dışında tüm kelimeler küçük harf kullanılarak yazılır. Örneğin:

'Genişlik al', 'getWidth' olur

'Hollywood kız adını al', 'getHollywoodGirlName' oluyor 

"Bu stil, değişkenlerin ve yöntemlerin adları için kullanılır."

"Yani, çok fazla kural yok."

1)  Her şey Alt CamelCase ile yazılmıştır.

2)  Sınıfların ve arabirimlerin adları her zaman büyük harfle yazılır.

3)  Paket adları her zaman küçük harflidir.

4)  Sabitler her zaman büyük harflidir.

"Birkaç nüans var, ancak genel olarak olan bu."

"Şimdi yöntemlere geçelim.  "Yöntem adları neredeyse her zaman bir fiille başlar! 'count' bir yöntem için kötü bir addır. GetCount() olarak adlandırmak daha iyidir. Bir yöntem, nesne üzerinde bazı eylemler gerçekleştirir:  startDownload , interrupt  , sleep  , loadPirateMusic ."

"Bildiğiniz gibi, bir nesnenin özellikleri/alanlarıyla çalışmak için alıcılar ve ayarlayıcılar vardır:  getName / setName , getCount / setCount , vb."

"Tek istisna, boolean'lar içindir. Boolean'lar için, alıcı adları 'get' yerine 'is' kullanır, örneğin isDone, isEmpty. Bu şekilde, sıradan konuşmaya daha yakındır."

"Günde 8 saat yerine iki saat çalışmaya ne dersin? Baştan çıkarıcı mı?"

"Evet!"

"Olmanız gerektiği gibi. Küçük bir Java geliştiricisi için temel gereksinim, Java'nın temellerini, yani Java Core'u mükemmel bir şekilde anlamaktır."

"Başka bir sorum daha var. Element sayısını elde etmek için neden bu kadar farklı yöntemlerimiz var?"

Sınıf Öğe sayısını almak için yöntem/özellik
Sicim uzunluk ()
Sıralamak uzunluk
Dizi Listesi boyut ()
Konu Grubu etkin Sayı ()

"Her şeyden önce, Java 20 yılı aşkın bir süre önce, setCount / getCount gibi gereksinimler belirlenmeden önce icat edildi ve C dilinden 'mümkün olduğu kadar kısa yapmak' için alınan ortak bir yaklaşım vardı."

"İkincisi, anlambilim burada bir rol oynuyor. Bir diziden bahsederken uzunluğundan bahsediyoruz. Bir koleksiyondan bahsederken boyutundan bahsediyoruz."

"Ne ilginç bir ders."

"Sana daha fazlasını anlatmak isterdim ama korkarım hepsini bir anda hatırlamayacaksın. Sana küçük porsiyonlar halinde dağıtmak daha iyi."

"Ama süslü parantezlerin kullanımına ilişkin stile değinmek istiyorum: {}. İki yaklaşım var:"

1)  Köşeli parantez her seferinde yeni bir satıra gider

2)  Açılış parantezi önceki satırın sonuna, kapanış parantezi ise yeni bir satıra gider. Bu stile 'Mısır parantezleri' denir.

"Dürüst olmak gerekirse, nasıl kod yazacağınızı siz seçersiniz. Pek çok kişi aynı satırda bir açma ayracı kullanır. Birçok kişi bunu yeni bir satıra koyar. Bu, yumurtanın hangi ucunun kırılacağı tartışması gibidir: küçük uç mu yoksa büyük uç mu? son."

"Önerebileceğim tek şey, üzerinde çalıştığınız projede hangi stil kullanılıyorsa ona bağlı kalmanız. Başkasının kodunu kendi tercih ettiğiniz stile uyacak şekilde değiştirmeyin.  İnsanlar kusurludur. Bunu size Doktor Bilaabo olarak söylüyorum. "

"İlginç ders için teşekkürler Bilaabo. Söylediklerini düşüneceğim."