Bilinmesi Gereken Konular

Mobil uygulama, web uygulaması, oyun geliştirme, ağ yönetimi ve diğer konular ile ilgili bilgileri burada bulabilirsiniz
Cevapla
Kullanıcı avatarı
melihcelenk
Site Admin
Mesajlar: 217
Kayıt: 05 Eki 2021, 03:23

Bilinmesi Gereken Konular

Mesaj gönderen melihcelenk »

Bilinmesi gereken bazı konuları rastladıkça buraya ekleyeceğim.

● Snapshot Versiyon Nedir?
https://stackoverflow.com/questions/590 ... we-need-it

JAVA

● Java ile kodlama yaparken tipini bilmediğimiz bazı text verileri ondalıklı sayı olarak görüp double'a çevirebileceğimizi düşünebiliriz. Ancak baktığımız veriler double'a çevrilebilir gibi görünse de görmemiş olduğumuz bazı veriler başka formatta olabilir. Örneğin bazı veriler hesap makinelerindeki gibi bilimsel gösterim ile tutuluyor olabilir. Örneğin 9.0122222900391E-5 şeklinde tutulan bir veri 9.0122222900391×10^-5 anlamına gelir.

Kod: Tümünü seç

BigDecimal bd = new BigDecimal("9.0122222900391E-5");
şeklinde veriyi alabilir veya

Kod: Tümünü seç

double d = new BigDecimal(coordinate).doubleValue();
şeklinde double'a çevirebiliriz.

● Yukarıdaki maddedeki bilgiyi kullandığımız bir durumla ilgili kod yazalım. Bize "0.98123\-0.01\0.012E-4\0.00232\-0.002789\-0.989" gibi bir veri gelmiş olsun. Bu string'deki sayılara en yakın tamsayıların "1, 0, 0, 0, 0, -1" dizisiyle uyuşup uyuşmadığına bakalım.

Basit bir görünüm için hata kontrollerini çıkarıyorum.

Kod: Tümünü seç

String gelenVeri =  "0.98123\-0.01\0.012E-4\0.00232\-0.002789\-0.989";

List<Integer> kiyaslanacakListe= Arrays.asList(1, 0, 0, 0, 0, -1);
String[] ayrilmisVeri= gelenVeri.split("\\\\");

List<Integer> ayrilmisIntegerVeriListe = new ArrayList<>();
for (String veri : ayrilmisVeri){
	double d = new BigDecimal(veri).doubleValue();
	int i = (int) Math.round(d);
	ayrilmisIntegerVeriListe.add(i);
}
boolean ayrilmisIntegerVeriListe.equals(kiyaslanacakListe);
● Elimizde String tipinde bir path olsun. Bunu bir diziye herhangi bir şekilde bölmek istediğimizde String değişkenimize ait split() metoduyla karşılaşırız. Ancak bu metot regex parametre alır. Örneğin normalde "C:\\bir\\dosya\\yolu\\" şeklinde bir path'imiz varsa bunu parametre olarak "C:\\\\bir\\\\dosya\\\\yolu\\\\" şeklinde yazmamız gerekir. Bunu yapmadan aşağıdaki şekilde çözebiliriz.

Kod: Tümünü seç

String pathStr = "C:\\bir\\dosya\\yolu\\klasor";
String bolunecekPath = "C:\\bir\\dosya\\yolu\\";
String[] bolunmusDizinler = pathStr.split(Pattern.quote(bolunecekPath));
veya bir dizini alt klasörlerine diziye ayırmak için platform bağımsız şu satırı kullanabiliriz:

Kod: Tümünü seç

String[] subDirs = pathStr.split(Pattern.quote(File.separator));

● Listede filtreleme işlemi yapmak istiyoruz. Bir araba sınıfımız olsun ve hızı 150'den büyük olanları bir listeye atalım.

Araba.java

Kod: Tümünü seç

public class Araba{
	private String isim;
	private int hiz;
	
	Araba(String isim, int hiz){
	    this.isim = isim;
	    this.hiz = hiz;
	}
	public int getHiz(){
	    return this.hiz;
	}
	public String getIsim(){
	    return this.isim;
	}
	
	public boolean hizi150denBuyukMu() {
		return this.hiz > 150;
	}
}
Main.java

Kod: Tümünü seç

import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;

public class Main
import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;

public class Main
{
	public static void main(String[] args) {
		Araba togg = new Araba("TOGG", 180);
        	Araba devrim = new Araba("DEVRİM", 140);
	        List<Araba> arabalar = Arrays.asList(togg, devrim);
        
        	List<Araba> hizi150denBuyukArabalar = arabalar
	          .stream()
        	  .filter(Araba::hizi150denBuyukMu)
	          .collect(Collectors.toList());
          
        	for(Araba araba : hizi150denBuyukArabalar){
	            System.out.println(araba.getIsim() + " " + araba.getHiz());
        	}
	}

}
veya metod yazma gibi bir imkanımız yoksa filter satırını aşağıdaki gibi lambda expression ile yazabiliriz.

Kod: Tümünü seç

.filter(araba -> araba.getHiz() > 150)
● Bir obje listesinden objenin sadece bir alanından oluşan bir liste oluşturmak istiyorsak map kullanırız. Yukarıdaki Araba.java'yı kullanalım ve yeni bir main sınıfı yazalım. Araba sınıfının sadece isimlerini içeren bir String listesi oluşturalım.

Main.java

Kod: Tümünü seç

import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;

public class Main
{
	public static void main(String[] args) {
		Araba togg = new Araba("TOGG", 180);
	        Araba devrim = new Araba("DEVRİM", 140);
        	List<Araba> arabalar = Arrays.asList(togg, devrim);
        
	        List<String> arabalarinIsimleri = arabalar
	        .stream()
        	.map(Araba::getIsim)
	        .collect(Collectors.toList());
          
        	for(String arabaIsmi : arabalarinIsimleri){
	            System.out.println(arabaIsmi);
        	}
	}
}

instanceof keyword'ü: Bir objenin bir sınıfın örneği olup olmadığını kontrol etmek için kullanılır.
Örneğin Canlı sınıfından implement edilmiş Hayvan ve Bitki sınıflarınız var.

Kod: Tümünü seç

Canlı h = new Hayvan();
Canlı b = new Bitki();
if(h instanceof Hayvan){
   // Buraya girer
}
if(b instanceof Hayvan){
   // Buraya girmez
}
https://www.javatpoint.com/downcasting- ... f-operator

● Log seviyeleri bir üsttekileri de içerecek şekildedir. Örneğin WARN seçildiyse WARN, ERROR, FATAL log'ları basılır
TRACE
DEBUG
INFO
WARN
ERROR
FATAL
https://sematext.com/blog/logging-levels/


● Boolean obje tipindeki değişkenleri şu şekilde basitçe kontrol edebiliriz. NullPointerException almayız:

Kod: Tümünü seç

if ( Boolean.TRUE.equals(something) ) {
}
MAVEN
● Ekip olarak çalışırken yeni versiyon çıkılmadan bir kütüphane deploy edildiğinde sorun yaşayabilirsiniz. Kullandığınız bir dependency'nin versiyonu aynen olması gerektiği gibi. Ama bazı metotlar hata veriyor. Başka bilgisayarda çalışıyor, sizin bilgisayarınızda çalışmıyor.

Kod: Tümünü seç

		<dependency>
			<groupId>my.company</groupId>
			<artifactId>mysomething</artifactId>
			<version>1.2.3-X5</version>
		</dependency>
Siz bir 1.2.3-X5 versiyonu build almış olabilirsiniz, başkası da bir 1.2.3-X5 versiyonu build almış olabilir. İkisi merge alınmış, deploy edilmiş ve uzak makinede var. Ancak sizin bilgisayarınızda sadece sizin önceden oluşturduğunuz build var. clean install yapmanıza rağmen sorun çözülmüyor. Bu durumda ben m2 klasöründeki 1.2.3-X5 versiyonunu siliyorum. Ardından (IntelliJ üzerinde) File/Invalide Caches/Invalidate and Restart'a tıklıyorum. Tekrar açıldığında 1.2.3-X5 versiyonu uzak makineden çekiliyor ve sorunsuz çalışıyor.

Nerede Maven'ın bu m2 dosyası?

Windows için %homepath%\.m2 klasöründe (Örnek: C:\Users\kullanici\.m2)
Linux için $HOME/.m2 klasöründe (Örnek: /home/kullanici/.m2)

Dosyanın m2'den sonraki yolu şöyle olacaktır: m2\repository\my\company\mysomething\1.2.3-X5
Cevapla