0Pricing
Java Academy · Ders

Genişletme ve Daraltma Dönüşümleri

Otomatik genişletme dönüşümlerini ve açık daraltma dönüştürmelerini güvenli biçimde gerçekleştirmeyi öğrenin.

Genişletme ve Daraltma Dönüşümleri, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Java'da Tür Dönüşümleri

Java, uyumlu türler arasında değerleri dönüştürmenize olanak tanır. İki yön vardır:

  • Genişletme — daha büyük bir türe dönüştürme (güvenli, otomatik)
  • Daraltma — daha küçük bir türe dönüştürme (riskli, açık tür dönüştürme gerektirir)

Genişletme Dönüşümü

Genişletme, bir değeri daha büyük ve uyumlu bir türe atadığınızda otomatik olarak gerçekleşir. Hedef tür, kaynağın tüm değerlerini gösterebildiği için veri kaybı olmaz.

Genişletme sırası: byte → short → int → long → float → double

byte b = 42;
short s = b;    // byte → short (widening)
int i = s;      // short → int (widening)
long l = i;     // int → long (widening)
float f = l;    // long → float (widening)
double d = f;   // float → double (widening)

System.out.println(d); // 42.0

Daraltma Dönüşümü

Daraltma, tür dönüştürme işleci (type) kullanılarak açıkça yapılmalıdır. Değer hedef türe sığmazsa kesilebilir veya bozulabilir.

double price = 99.99;
int wholePart = (int) price; // narrows — decimal truncated
System.out.println(wholePart); // 99 (not rounded!)

long bigNum = 130L;
byte small = (byte) bigNum;  // 130 overflows byte (max 127)
System.out.println(small);   // -126 (unexpected!)

Daraltma Sırasında Taşma

Daraltma sırasında bir değer taştığında Java, istisna fırlatmak yerine modüler aritmetik kullanarak değeri döngüsel olarak başa sarar. Buna karşı korumayı kendiniz sağlamalısınız.

int million = 1_000_000;
byte narrowed = (byte) million;
System.out.println(narrowed); // 64 (wraps around)

// Safe narrowing: check bounds first
if (million >= Byte.MIN_VALUE && million <= Byte.MAX_VALUE) {
    byte safe = (byte) million;
} else {
    System.out.println("Value doesn't fit in byte!");
}

char ve int Dönüşümleri

char, bir Unicode kod noktasını temsil eden 16 bitlik işaretsiz bir tam sayıdır. Otomatik olarak int türüne genişler, ancak int türünden yeniden char türüne dönüştürülürken açık tür dönüştürme yapılmalıdır.

char letter = 'A';
int code = letter;          // widening: char → int
System.out.println(code);   // 65

int nextCode = code + 1;
char nextLetter = (char) nextCode; // narrowing: int → char
System.out.println(nextLetter);    // B

// Useful for Caesar cipher shifts
char shifted = (char) ('a' + 3);
System.out.println(shifted); // d

Kayan Noktalı Sayıdan Tam Sayıya Kesme

Kayan noktalı bir sayıyı tam sayıya dönüştürmek, sayıyı yuvarlamaz; sıfıra doğru keser. Yuvarlama gerekiyorsa Math.round() kullanın.

double pos = 3.9;
double neg = -3.9;

System.out.println((int) pos);         // 3 (not 4)
System.out.println((int) neg);         // -3 (not -4)
System.out.println(Math.round(pos));   // 4
System.out.println(Math.round(neg));   // -4

String'den Sayıya Dönüştürmeler

Bir String değerini sayıya ayrıştırmak için tür dönüştürme değil, sarmalayıcı sınıf yöntemleri kullanılır. Sayısal olmayan bir dize geçirmek NumberFormatException oluşturur.

String input = "42";
int parsed = Integer.parseInt(input);
double parsedD = Double.parseDouble("3.14");

System.out.println(parsed + 1);  // 43
System.out.println(parsedD);     // 3.14

try {
    int bad = Integer.parseInt("abc");
} catch (NumberFormatException e) {
    System.out.println("Not a valid number!");
}

Sayıdan String'e Dönüştürmeler

Bir sayıyı String'e String.valueOf(), Integer.toString() veya "" ile dize birleştirme kullanarak dönüştürebilirsiniz.

int score = 95;
String s1 = String.valueOf(score);    // "95"
String s2 = Integer.toString(score);  // "95"
String s3 = score + "";              // "95" (concat trick)

System.out.println(s1.getClass().getSimpleName()); // String

// Converting to different bases
System.out.println(Integer.toBinaryString(42)); // 101010
System.out.println(Integer.toHexString(255));   // ff

İfadelerde Tür Yükseltme

Aritmetik ifadelerde Java, işlenenleri otomatik olarak yükseltir:

  • byte, short, char → işlemden önce int türüne yükseltilir
  • İşlenenlerden biri long ise sonuç long olur
  • İşlenenlerden biri float veya double ise sonuç daha geniş türle aynı olur
byte x = 10;
byte y = 20;
// byte z = x + y; // compile error! sum is promoted to int
int z = x + y;      // correct

long a = 100L;
float b = 2.5f;
double result = a * b; // long * float → double
System.out.println(result); // 250.0

Bileşik Atama Operatörleri

+=, -= ve *= gibi bileşik operatörler örtük bir daraltma dönüştürmesi içerir. Bu sayede byte ve short değişkenleriyle daha kısa kod yazabilirsiniz.

byte count = 100;
// count = count + 1; // compile error — int result needs cast
count += 1;           // OK — compound op casts automatically
System.out.println(count); // 101

short total = 1000;
total *= 2;  // implicit narrow cast included
System.out.println(total); // 2000

Uygulama: Güvenli Tamsayı Ayrıştırma

Gerçek hayatta kullanılan bir yaklaşım: kullanıcı girdisini güvenli biçimde ayrıştırın, aralığını doğrulayın ve gereken tam türe daraltın.

public static byte parseAsByte(String input) {
    int value = Integer.parseInt(input); // can throw NumberFormatException
    if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE) {
        throw new IllegalArgumentException(
            "Value " + value + " out of byte range");
    }
    return (byte) value;
}

// Usage
System.out.println(parseAsByte("100")); // 100
System.out.println(parseAsByte("200")); // IllegalArgumentException

Hızlı Kontrol

Aşağıdaki kodun çıktısı nedir?

double d = -7.8;
int i = (int) d;
System.out.println(i);

Özet: Tür Genişletme ve Daraltma

Temel çıkarımlar:

  • Genişletme otomatiktir ve güvenlidir: byte→short→int→long→float→double
  • Daraltma açık bir dönüştürme gerektirir ve veri kaybına veya taşmaya neden olabilir
  • char, int türüne genişletilir; int, bir dönüştürmeyle yeniden char türüne daraltılabilir
  • Kayan noktalı sayıdan int türüne dönüştürme sıfıra doğru kesme yapar, yuvarlama yapmaz
  • String değerlerini sayılara dönüştürmek için Integer.parseInt/Double.parseDouble kullanın
  • Bileşik operatörler (+=, *=) örtük daraltma dönüştürmeleri içerir

Sıkça Sorulan Sorular

“Genişletme ve Daraltma Dönüşümleri” dersi ücretsiz mi?

Evet — “Genişletme ve Daraltma Dönüşümleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Genişletme ve Daraltma Dönüşümleri” dersinde ne öğreneceğim?

Otomatik genişletme dönüşümlerini ve açık daraltma dönüştürmelerini güvenli biçimde gerçekleştirmeyi öğrenin. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Genişletme ve Daraltma Dönüşümleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İlkel Türler ve Başvuru Türleri
  2. Genişletme ve Daraltma Dönüşümleri
  3. instanceof İşleci
  4. Uygulamada Tür Dönüştürme
← Java Academy Sayfasına Dön