"Merhaba Dünya" kodunun mantığı ne?

Hello world kontrol kalemi gibidir. Compiler, IDE, Interpretor vs calisip calismadigini test etmek icin yazilan tek satirlik kod. Assembly gibi diller haric ( konsol ciktisi almak icin epey kod yazmak gerek ) genelde baslangic icin yazarsin her sey dogru calisiyor mu diye gormek icin.

Backend dunyasinda kullanilmaz, konsol ciktisi audit icin kullanilir, genellikle backend ciktilari dosyalara ya da remote servislere gonderilir indexlenmesi icin. Bazen veritabanina da yazilir. ( Bankalarda ornegin, hic bir log kaybolsun istenmez )

Ayrica kalabalik servislerin backend programlari distributed calisir, ayni anda 20 server ayni programi calistirir, hepsinin logunu tek tek ilgili server konsolundan takip etmek mumkun degildir. O yuzden konsol logu kullanilmaz. System.out.println() hic kullanilmaz. Genelde ozellestirilmis loglama kutuphaneleri kullanilir. Ornegin nodejs icin Winston ( winstonjs/winston ) , Java icin SLF4J ve onun implementasyonlari vs.

Backend de bir seyleri debug etmek icin konsol ciktisina bakiyorsan cok yanlis yapiyorsun demektir.
 
Son düzenleme:
@bitwise hocam anladığım kadarıylâ system.out.println("") önemsiz bir koddur? Hocam peki Back-end'de debug etmek için ne yapmamı önerirsiniz?

Onemsiz degil de, konsola yazdigin kod kaybolur gider. Backend loglari onemlidir, o sebeple dosyalara yazmak istersin. Hazir dosyaya yazmisken konsola da ayni ciktiyi yazmak istersin. Dosyaya yazmak zaman alir ( disk IO suresi uzundur ) o yuzden async yapmak istersin. Basit bir loglama isi bir suru dert acar, o yuzden System.out vs ile ugrasmazsin, profesyonel kutuphanelerle bu isi halledersin : ) Sebep o.

IDE'lerin kendi debug tool'larini kullanarak debug edersin. Ama Unit ve Integration test yaptiktan sonra. Yeni basliyorsan en azindan Unit test nasil yapiliyor ogrenmeni tavsiye ederim.
 
Onemsiz degil de, konsola yazdigin kod kaybolur gider. Backend loglari onemlidir, o sebeple dosyalara yazmak istersin. Hazir dosyaya yazmisken konsola da ayni ciktiyi yazmak istersin. Dosyaya yazmak zaman alir. (Disk IO suresi uzundur.) O yuzden async yapmak istersin. Basit bir loglama isi bir suru dert acar, o yuzden System.out vs ile ugrasmazsin, profesyonel kutuphanelerle bu isi halledersin : ) Sebep o.
Anladım ama kafamda 3 soru oluştu hocam. :)



Örnek vermek gerekirse bankacılık uygulamasında 1.000 ₺ yolladık ve bunun log'unu .txt dosyasına kaydetmesini ve konsola yazdırmasını istiyoruz.

  1. Konsola yazdığımız zaman ne oluyor? (veya konsol dediğimiz şeyi anlayamayacak kadar aptal mıyım?)
  2. konsola system.out.println("x lira para gönderildi"); buradaki para miktarı her zaman değişik olacağı için bunu program nasıl yazabiliyor? İşin işine değişkenler(değişkenleri de bilmiyorum hocam özür dilerim.) mi giriyor?
  3. miktar diye belirttiğimiz helime satırına uygulamanın yolladığı değeri yazsın mı diyoruz? (Yoksa bu bahsettiğim şey değişken mi zaten?)

Umarım anlatabilmişimdir hocam. Rahatsızlık verdiysem çok özür dilerim.
 
Son düzenleme:
Anladım ama kafamda 3 soru oluştu hocam. :)



Örnek vermek gerekirse bankacılık uygulamasında 1.000 ₺ yolladık ve bunun log'unu .txt dosyasına kaydetmesini ve konsola yazdırmasını istiyoruz.

  1. Konsola yazdığımız zaman ne oluyor? (veya konsol dediğimiz şeyi anlayamayacak kadar aptal mıyım?)
  2. konsola system.out.println("x lira para gönderildi"); buradaki para miktarı her zaman değişik olacağı için bunu program nasıl yazabiliyor? İşin işine değişkenler(değişkenleri de bilmiyorum hocam özür dilerim.) mi giriyor?
  3. miktar diye belirttiğimiz helime satırına uygulamanın yolladığı değeri yazsın mı diyoruz? (Yoksa bu bahsettiğim şey değişken mi zaten?)

Umarım anlatabilmişimdir hocam. Rahatsızlık verdiysem çok özür dilerim.

1) Konsol abstrakt bir sey, kafanda net bir sey olusmamasi normal. Java object oriented oldugu icin aslinda konsolu en iyi anlayabilecegin dillerden birisi.

System -> out -> println ; Sistemin -> out stream'ine -> bunu yaz gibi bir anlami var.

Konsolun tam olarak neye tekabul edecegi programini nasil calistirdiginla alakali ( System -> out her zaman ayni yere yazmaz , JVM e baglidir bu ).

Windows'da CMD uzerinde calisirsan Java programini System->out CMD'ye yazar.
Browser uzerinde calistirirsan browser console' una yazar. ( System -> out = Browser konsoludur bu durumda )
Linux sistemlerde nohup vs kullanarak fork ettiysen programini nohup ciktisi System.out olur, oraya yazar.

Java'nin kalabalik bir dil oldugunu soyleyerek elestirenler ( verbose ) , buna cozum olarak Java'daki temel abstraction'lari basit komutlarin arkasina gizlerler. Ornegin System.out.println() yerine yalnizca print() yazarsin( Python, R, Kotlin ). JS'de console.log() , yazarsin ornegin. Hangisinin daha iyi oldugu kisiden kisiye degisir.

OO paradigmasinin guzelligi senin kodunu hic degistirmeden arka planda bu islerin donmesi, buna abstraction denilir. Bunun sayesinde esnek yapilar kurabilirsin.

Abstraction (computer science) - Wikipedia


2,3) Hepsini loglara verdigin degiskenlerle yapiyorsun.

log.info("Hede hodoye {} gonderdi", Lira(657))

Seklinde.

Ayrica bu kadar basit degil, bankacilik duzenleme bilmemnesi olarak her bilgiyi her loga yazamazsin. ( Anne kizlik soy adi, sifre, kredi karti vs ). Bunun icin ozel loglar var. Ama cok kafa karistirmak istemiyorum : )
 
1) Konsol abstrakt bir sey, kafanda net bir sey olusmamasi normal. Java object oriented oldugu icin aslinda konsolu en iyi anlayabilecegin dillerden birisi.

System -> out -> println ; Sistemin -> out stream'ine -> bunu yaz gibi bir anlami var.

Konsolun tam olarak neye tekabul edecegi programini nasil calistirdiginla alakali ( System -> out her zaman ayni yere yazmaz , JVM e baglidir bu ).

Windows'da CMD uzerinde calisirsan Java programini System->out CMD'ye yazar.
Browser uzerinde calistirirsan browser console' una yazar. ( System -> out = Browser konsoludur bu durumda )
Linux sistemlerde nohup vs kullanarak fork ettiysen programini nohup ciktisi System.out olur, oraya yazar.

Java'nin kalabalik bir dil oldugunu soyleyerek elestirenler ( verbose ) , buna cozum olarak Java'daki temel abstraction'lari basit komutlarin arkasina gizlerler. Ornegin System.out.println() yerine yalnizca print() yazarsin( Python, R, Kotlin ). JS'de console.log() , yazarsin ornegin. Hangisinin daha iyi oldugu kisiden kisiye degisir.

OO paradigmasinin guzelligi senin kodunu hic degistirmeden arka planda bu islerin donmesi, buna abstraction denilir. Bunun sayesinde esnek yapilar kurabilirsin.

Abstraction (computer science) - Wikipedia


2,3) Hepsini loglara verdigin degiskenlerle yapiyorsun.

log.info("Hede hodoye {} gonderdi", Lira(657))

Seklinde.

Ayrica bu kadar basit degil, bankacilik duzenleme bilmemnesi olarak her bilgiyi her loga yazamazsin. ( Anne kizlik soy adi, sifre, kredi karti vs ). Bunun icin ozel loglar var. Ama cok kafa karistirmak istemiyorum : )
Hocam en iyisi sıfırdan kodlamak yerine dediğiniz gibi popüler Frameworkler kullanmak yoksa dediğiniz gibi basit bir işlemi yapmak için 40 takla atarız. :) Ayrıca cevaplarınız için çok teşekkür ederim, sağ olun. <3
 

Geri
Yukarı