Skip to content

Instantly share code, notes, and snippets.

@v0lkan
Created December 20, 2013 05:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save v0lkan/8050728 to your computer and use it in GitHub Desktop.
Save v0lkan/8050728 to your computer and use it in GitHub Desktop.

http://paste2.org/OxJ49ZkH linkindeki koda istinaden:

Oncelikle, her zaman dedigimi tekrarliyorum GitHub kullanmayi aliskanlik haline getirin. En ufak kod parcanizi, calismalarinizi karamalarinizi, notlarinizi, v.b. GitHub'da repository acip paylasin. Bunun birkac yarari var:

  • Oncelikle ileride is hayatina atildiginizda sizi ise alacak kisi, Facebook profilinizde arkadasiniza tavsan kulagi yaptiginiz parti fotografinizi degil, ozgur kaynakli projelerinizi inceleyecek.
  • GitHub kullanarak ayni zamanda surum yonetim sistemi kullanmayi da ogreniyor olacaksiniz; bu da is hayatina biraz daha onde baslayacaginiz anlamina geliyor.
  • GitHub kullandiginizda, baskalari da kodunuzu forklayarak uzerinde duzeltmeler yapabilir; size yardimci olabilir.
  • Hatta ogretmeninizle de odevinizi GitHub uzerinden paylasabilirsiniz. – Benim ogrencim olsa, ve bana USB yerine, tum commit gecmisini inceleyebilecegim bir GitHub linki verse, kafadan 100 uzerinden 20 puan bonus verirdim odevine.

Gelelim koda:

  • satir 2-4: @author gereksiz. Surum yoneti sisteminin amaclarindan biri de kodun sahibinin kim oldugunu takip etmektir. Dolayisiyla kodun header dosyasinda author bilgisini loglamak gecmiste kalmis, ve zamanin gerisinde bir aliskanlik. – Cok gerekiyorsa bir CONTRIBUTORS dosyasi olusturulur, ve projeye katkida olanlarin erisim bilgileri bu dosyaya eklenir.
  • Method'larda javadoc yorumlarinin olmasi guzel olurdu.
  • satir 6: (naming conventions): virgul ,den sonra bir bosluk birakilmali; her degisken kendi satirinda tanimlanmali; camelCase kullanilmali ( door_width degil; doorWidth ).
  • (conventions devam) Ilgili kod gruplari boslukla ayrilda, ve { den once bir bosluk birakilsa okunabilirlik artar (ozellikle decleration gruplarindan sonra bosluk birakmak adettendir, if for vb kontrol kelimelerinden sonra da bir bosluk birakilir). Ornegin drawRoof metodunu biraz ferahlatalim:
public void drawRoof() {
	int space = this.center;
	int limit = 2;
	
	for (int i = 1; i <= this.roof_height; i++) {
		drawSpace(space);
	
		if (space != this.center) {
			for (int j = 1; j < limit; j++) {
				if ((limit / 2) == j) {
					System.out.print( "+" );
				} else if(limit / 2 < j) {
					System.out.print("\\");
				} else {
					System.out.print("/");
				}
			}
		} else {
			System.out.print("+");
		}
		
		limit = limit+4;
		space = space - 2;
		
		System.out.println();
	}
}
  • satir 17: constructor isimlendirilirken fiil degil, isim kullanilir: public DrawHome(int width){ degil; public Home(int width) {. Soyle olsa semantik olarak daha dogru olurdu.
public class Home {
   ...
   
   public Home(int width) {
      ...
   }
   
   ...
   
   public void draw() {
      // drawing logic goes here.
   }
}
  • principle of least knowledge geregince drawRoof drawMed drawDoor average methodlarinin private tanimlanmasi lazim (i.e., private void drawRoof())
  • satir 9: // TODO Auto-generated method stub --> WTF? gereksiz bir comment. silinmeli.
  • " ", "", "*", "/" gibi sik tekrarlanan ve degismeye musait Stringleri sembilik sabit olarak tanimlamak daha dogru olur.
public Constants {
   public static final String ROOF_MIDDLE = "+";
   public static final String ROOF_RIGHT = "/";
   public static final String ROOF_LEFT = "\\";
   ...
}

gibi. Boylelikle eger ogretmen bir sonraki odevde "haydi simdi evi / yerine ! ile cizelim dediginde, tum dosyada find/replace yapmaniza gerek kalmaz. (ilgili replace magic number with symbolic constant -- Gercek projelerde bu tarz sabit tanimlamalari hayat kurtarir.

  • System.out.println cagrilarini

  • Uzun ve anlamli isimler kullanmak daha dogru olur. drawMed mesela "draw medium" mu, "draw median" mi, yoksa "draw medussa" mi anlasilmiyor; drawMiddlegibi daha acik net bir isim tercih edilmeli.

  • satir 72: \\ Merkez --> Kodda Turkce yorum, degisken, fonksiyon ismi kullanirsaniz ugrastirmayin beni, kendinizi kulaginizdan tavana civileyin; bir saat falan asili bekleyin.

  • satir 140: Ortalama hesaplamanin en kolay yolu (a + b) / 2 dir. basit dusunun. Herkes kod yazabilir, onemli olan baskasi okuyunca anlasilabilen kod yazmaktir. – while(--a > ++b); seklinde bir ortalama alma kodu gordugum anda odevden bir 10 puan kirardim kesin.

  • satir 114-116: if ve for ayni seviyede indentli, halbuki for blogunun bir seviye icerde olmasi gerekli. indendation onemlidir.

  • System.out.print ve System.out.println cagrilarini bir Drawer sinifinda toplamak guzel olurdu. boylelikle, ileride System degil, baska bir output ortamina da cizim aktarabilirdik.

public interface Pen {
    public static void draw(String stuff);
    public static void drawLine(String stuff);
}

public class SystemHomePen implements Pen {
    public static void draw(String stuff) {
        System.out.print(stuff);
    }
    
    public static void drawLine(String stuff) {
        System.out.println(stuff);
    }
}

Ardindan System.out.print yerine SystemHomePen.draw ve System.out.println yerine SystemHomePen.drawLine.


sanirim simdilik bunlar; akliniza gelen baska seyler olursa paylasmaktan cekinmeyin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment