Churn Modelleme Uygulaması #1
Kütüphanelerin ve Veri Setinin Yüklenmesi

Bu yazımızda sizinle farklı makine öğrenmesi algoritmalarını kullanarak Churn modelleme uygulamasına başlayacağız. Burada yapacağımız Churn modelleme uygulamasının kapsamı yalnızca makine öğrenme algoritmalarının kullanılması olmayacak.

Buna ek olarak, bu algoritmalar ile kullanacağımız veri seti üzerinde veriden bilgi edinme, veri ön işleme, veri görselleştirme ve farklı algoritmaları birbirleriyle farklı başarı kriterlerine göre kıyaslama gibi işlemleri de gerçekleştireceğiz. Bu kıyaslama işlemi ile birlikte her algoritmanın bu farklı başarı kriterleri ile veri üzerindeki başarısını göreceğiz ve ardından genel bir değerlendirme yapacağız.

Yazımıza başlıkta da kullandığımız Churn’un ne anlam ifade ettiğini açıklamakla başlayalım.

Churn Nedir?

Terminolojik olarak kayıp anlamına gelir. Bu herhangi bir alandaki bir hedef verinin kaybı olarak yorumlanabilir.  Yaygın olarak bu çalışmadaki Churn ise, belli bir dönem içerisinde bir işletmenin ne kadar müşteri kaybettiğini ifade eder. Churn modelleme ile herhangi bir işletmenin müşteri kaybı analizini yapabiliriz. Bu analiz sayesinde işletmeler, kendileri ile artık çalışma yapmayacak müşterileri tahmin edebilirler.

Bu uygulamamızı yaparken kullanacağımız veri setine buradan erişebilirsiniz. Veri setimizi diğer yazılarımızda olduğu gibi Google Colab üzerinden Python kullanarak inceleyeceğiz. Bunun için öncelikle veri setini ilgili siteden indirip Google Drive’a yüklemelisiniz. Google Drive için kullandığınız e-posta adresiniz ile Google Colab’ta oturum açtıktan sonra veri kümesini artık kullanabilir durumda olacaksınız.

Yukarıda gerçekleştirdiğimiz adımlardan sonra artık veri seti üzerinde işlem yapabilir durumdayız. Öncelikle veri seti üzerinden kullanacağımız kütüphaneleri yüklememiz gerekmektedir. Bunun için aşağıdaki kod bloğunu kullanabiliriz:

!pip install researchpy
!pip install keras-tuner

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
import researchpy as rp
import lightgbm as lgb
warnings.filterwarnings("ignore")
from sklearn.metrics import roc_auc_score, accuracy_score, confusion_matrix,classification_report,roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB,MultinomialNB,ComplementNB,BernoulliNB
from sklearn.metrics import roc_curve, auc

roc_auc_score, accuracy_score, confusion_matrix, classification_report ve roc_auc_score’u, algoritmaların başarılarını ölçmek için kullanacağız. Buradan elde ettiğimiz sonuçları birbirleri ile kıyaslayıp hangi algoritmanın hangi metrik ile ne kadar başarılı olduğunu görebiliriz.

Veri setimiz Excel formatında olduğundan Python ortamında yüklemek için pandas kütüphanesinin read_csv metodunu kullanacağız. Verilerimizi yükledikten sonra head metodunu kullanacağız ve böylelikle veri kümemiz içerisinden belirlediğimiz sayı kadar veriyi ekrana göstereceğiz.

data = pd.read_csv("/content/drive/MyDrive/Churn_Modelling.csv")
data.head(10)

Veri kümemiz içerisinde yer alan parametrelerin açıklamaları aşağıda yer alan tablodaki gibidir.

ParametreAçıklaması
CreditScoreMüşterinin kredi skorunu belirtir.
GeographyMüşterinin ülkesini belirtir.
GenderMüşteri cinsiyetini belirtir.
AgeMüşterinin yaşını belirten sütundur.
TenureMüşterinin banka ile çalışma süresini belirten sütundur.
BalanceMüşterinin bakiyesini belirten sütundur.
   NumOfProductsMüşterinin sahip olduğu ürün sayısını belirten sütundur.
HasCrCardMüşterinin Kredi kartı sahibi olup olmadığını belirten sütundur.
IsActiveMemberMüşterinin aktif kullanıcı olup olmadığımı belirten sütundur.
EstimatedSalaryMüşterinin tahmini yıllık maaşını belirten sütundur.
ExitedMüşterinin bankadan ayrılıp ayrılmadığını belirten sütundur.
RowNumberMüşterinin sütun numarasını belirtir.
CustomerIdMüşterinin kullanıcı numarasını belirten sütundur.
SurnameMüşteri soyadını belirten sütundur.

Veri setimizi ve parametreleri incelediğimizde RowNumber, CustomerId ve Surname parametreler önemsiz olduğundan veri setimiz içerisinden silmemiz gerekmektedir. Aynı zamanda kişinin yaşadığı bölge ve cinsiyeti bankaden ayrılıp ayrılmayacağını belirlemediği için bu değerleri nümerik hale dönüştürürken One Hot dönüşümü yapacağız.

Bu işlemlerin ardından yaş grubunu belli aralıklara göre gruplayıp kategorik hale dönüştüreceğiz ve ardından One Hot dönüşümü ile nümerik hale getireceğiz.

Yukarıda belirttiğimiz işlemleri gerçekleştirmeden önce veriden bilgi edinmeye çalışalım.

Veri Setinden Bilgi Edinme

Veri setimizde “Exited” sütunu olduğunu görüyoruz. Bu değer müşterinin bankadan ayrılıp ayrılmadığını belirttiğinden bu sütunun toplamı alırsak bankadan ayrılan toplam müşteri sayısını elde edebiliriz.

INPUT:

data["Exited"].sum()

OUTPUT :


2037

Veri setinde 2037 tane bankadan ayrılmış müşterinin var olduğunu görüyoruz.

INPUT:

data.isna().sum()

OUTPUT:

RowNumber          0
CustomerId         0
Surname            0
CreditScore        0
Geography          0
Gender             0
Age                0
Tenure             0
Balance            0
NumOfProducts      0
HasCrCard          0
IsActiveMember     0
EstimatedSalary    0
Exited             0
dtype: int64

Veri setinde boş değer yer almamaktadır.

INPUT:

data.info()

OUTPUT:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 14 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   RowNumber        10000 non-null  int64  
 1   CustomerId       10000 non-null  int64  
 2   Surname          10000 non-null  object 
 3   CreditScore      10000 non-null  int64  
 4   Geography        10000 non-null  object 
 5   Gender           10000 non-null  object 
 6   Age              10000 non-null  int64  
 7   Tenure           10000 non-null  int64  
 8   Balance          10000 non-null  float64
 9   NumOfProducts    10000 non-null  int64  
 10  HasCrCard        10000 non-null  int64  
 11  IsActiveMember   10000 non-null  int64  
 12  EstimatedSalary  10000 non-null  float64
 13  Exited           10000 non-null  int64  
dtypes: float64(2), int64(9), object(3)
memory usage: 1.1+ MB

Dönen değerleri incelediğimizde veri setinde boş değer olmadığını bir kez daha görmüş olduk. Aynı zamanda veri setinde yer alan sütunların veri tiplerini de görebiliriz.

INPUT

data["Geography"].unique()

OUTPUT:

array(['France', 'Spain', 'Germany'], dtype=object)

Veri setimizde 3 farklı ülkeden insanlar bulunmaktadır. Bunlar; İspanya, Fransa ve Almanya’dır.

Veri setimizde yer alan kategorik sütunların içerisinde sınıfların dağılım yüzdelerini incelemek için aşağıdaki kod bloğunu kullanabiliriz:

INPUT:

fig, axarr = plt.subplots(2, 3, figsize=(30, 10))
data["Gender"].value_counts().plot.pie(explode = [0.05,0.05], autopct = '%1.1f%%',ax=axarr[0][0]);
data["Geography"].value_counts().plot.pie(explode = [0.05,0.05,0.05], autopct = '%1.1f%%',ax=axarr[0][1]);
data["IsActiveMember"].value_counts().plot.pie(labels = ["Active","Inactive"],explode = [0.05,0.05], autopct = '%1.1f%%',ax=axarr[0][2]);
data["NumOfProducts"].value_counts().plot.pie(explode = [0.05,0.05,0.05,0.06], autopct = '%1.1f%%',ax=axarr[1][0]);
data["HasCrCard"].value_counts().plot.pie(labels = ["Yes","No"],explode = [0.05,0.05], autopct = '%1.1f%%',ax=axarr[1][1]);
data["Exited"].value_counts().plot.pie(labels = ["Not Exited","Exited"],explode = [0.05,0.05], autopct = '%1.1f%%',ax=axarr[1]

Yukarıda yer alan pasta grafiklerini incelediğimizde:

  • Veri setinde yer alan insanların çoğunluğunun erkek olduğunu,
  • Müşterilerimizin çoğu Fransız müşteriler olduğunu; aynı zamanda Fransız müşterilerin varlığının, Alman ve İspanyol müşterilerin varlığının neredeyse 2 katı olduğunu,
  • Müşterilerimizin çoğunluğu aktif kullanıcı olmasına rağmen aktif olmayan kullanıcılarımızın yüzdesinin bir hayli yüksek olduğunu,
  • Müşterilerimizin %96,7’sinin en fazla 2 ürüne sahip olduğunu,
  • Müşterilerimizin çoğunluğunun kredi kartına sahip olduğunu,
  • Veri setimizdeki müşterilerin %79,6’sının bankanın müşteri olmaya devam ettiğini görebiliriz.

Veri setimizde kaç sütun ve veri örneği olduğunu öğrenmek istersek aşağıdaki kod bloğunu kullanabiliriz:

INPUT:

data.shape

OUTPUT:

(10000, 14)

Kodu bloğu çalıştırıldığında (10000, 14) sonucunu elde ederiz. Bu 10000 veri örneği, 14 sütun olduğunu gösterir.

Bir sonraki yazımızda veri setimiz üzerinde görselleştirme yaparak verilerimizden bilgi edinmeye devam edeceğiz.

Buraya tıklayarak bir sonraki yazımıza erişebilirsiniz.

MCHNLRNRU95A10517
Python’da Veri Tabanı İşlemleri #2

Bu yazıda bir önceki yazımızda oluşturmuş olduğumuz MusteriTablosu isimli tablo üzerinde Python ile örnek uygulamalar yapacağız. Burada kullanacağım veri tabanı ile ilgili daha fazla bilgi için buraya tıklayarak bir önceki yazıya gidebilirsiniz.

Uygulama 1: Müşteri tablosunda taksit sayısı 6’dan küçük olanları listeleyelim.

INPUT: 

musteriler = sqlite3.connect("musteriler.sqlite")
imlec = musteriler.cursor()
secilenler = imlec.execute("Select * From MusteriTablosu WHERE MusteriTaksitsayisi < 6")
print(secilenler.fetchall())

OUTPUT:

[(127650, 'Ece', 'Gündüz', 28, 'K', 3655, 1760, 4, 440)]

Burada veri tabanına olan erişimimizi kapatmıyorum. Çünkü yazı boyunca aynı bağlantı kodunu tekrar tekrar yazmayalım.

Uygulama 2: Müşteri tablosunda geliri 3000 TL’den fazla ve yaşı 30’dan küçük olan müşterileri listeleyelim.

INPUT:

secilenler1 = imlec.execute("Select * From MusteriTablosu WHERE MusteriGeliri > 3000 AND MusteriYas < 30")
secilenler1.fetchall()

OUTPUT:

[(127650, 'Ece', 'Gündüz', 28, 'K', 3655, 1760, 4, 440),
 (518023, 'Gizem', 'Duyar', 23, 'K', 3500, 2750, 12, 229.17)]

Uygulama 3: Müşteri tablosunda cinsiyeti kadın olanları listeleyelim.

INPUT:

secilenler2 = imlec.execute("Select * From MusteriTablosu WHERE MusteriCinsiyet  = 'K'")
secilenler2.fetchall()

OUTPUT:

[(127650, 'Ece', 'Gündüz', 28, 'K', 3655, 1760, 4, 440),
 (518023, 'Gizem', 'Duyar', 23, 'K', 3500, 2750, 12, 229.17),
 (812503, 'Aslı', 'Çevik', 26, 'K', 3000, 1650, 6, 550),
 (356721, 'Betül', 'Çevreci', 26, 'K', 2800, 1400, 6, 233.34)]

Uygulama 4: Müşteri tablosunda aylık ödemesi 600 TL’den düşük olan müşterilerin borcunu, gelirini, adını ve soyadını listeleyelim.

INPUT:

secilenler3 = imlec.execute("Select MusteriAd, MusteriSoyad, MusteriGeliri, MusteriToplamBorc From MusteriTablosu WHERE MusteriAylikOdeme  < 600")
secilenler3.fetchall()

OUTPUT:

[('Ece', 'Gündüz', 3655, 1760),
 ('Gizem', 'Duyar', 3500, 2750),
 ('Aslı', 'Çevik', 3000, 1650),
 ('Betül', 'Çevreci', 2800, 1400)]

Uygulama 5: Insert komutunu kullanarak aşağıda verilen verileri veri tabanına ekleyelim.

(625173, “Salih”, “Güven”, 30, “E”, 2200.00, 1250.00, 6, 208.34)

(153294, “Melike”, “Özdemir”, 26, “K”, 4350.00, 4250.00, 12, 283.34)

(309852, “Berk”, “İnan”, 56, “E”, 3800.00, 2760.00, 12, 230.00)

Bu verileri liste olarak yazıp, bir önceki yazıda oluşturduğumuz fonksiyon içerisine yazalım.

INPUT:

yeniVeriler = [[625173, "Salih", "Güven", 30, "E", 2200.00, 1250.00, 6, 208.34], [153294, "Melike", "Özdemir", 26, "K", 4350.00, 4250.00, 12, 283.34], [309852, "Berk", "İnan", 56, "E", 3800.00, 2760.00, 12, 230.00]]
VeriGirisi(yeniVeriler)
musteriler.commit()
secilenler4 = imlec.execute("Select * From MusteriTablosu ")
secilenler4.fetchall()

OUTPUT:

[(136752, 'Ahmet', 'Yenidoğan', 36, 'E', 4500, 3800, 6, 633.34),
 (127650, 'Ece', 'Gündüz', 28, 'K', 3655, 1760, 4, 440),
 (201638, 'Ali', 'Çelik', 46, 'E', 6500, 8900, 12, 741.67),
 (518023, 'Gizem', 'Duyar', 23, 'K', 3500, 2750, 12, 229.17),
 (812503, 'Aslı', 'Çevik', 26, 'K', 3000, 1650, 6, 550),
 (437612, 'Mehmet', 'Bekçi', 35, 'E', 6500, 4800, 6, 800),
 (356721, 'Betül', 'Çevreci', 26, 'K', 2800, 1400, 6, 233.34),
 (971025, 'Cenk', 'Kahraman', 33, 'E', 4250, 9800, 12, 816.67),
 (625173, 'Salih', 'Güven', 30, 'E', 2200, 1250, 6, 208.34),
 (153294, 'Melike', 'Özdemir', 26, 'K', 4350, 4250, 12, 283.34),
 (309852, 'Berk', 'İnan', 56, 'E', 3800, 2760, 12, 230)]

Uygulama 6: Update komutunu kullanarak Melike Özdemir kişisinin borcunu 12800.00 TL ve taksit sayısını 8 olarak güncelleyelim. Buna bağlı olan sütunları da güncelleyelim.

INPUT:

imlec.execute("UPDATE MusteriTablosu SET MusteriToplamBorc = 12800.00, MusteriTaksitSayisi = 8, MusteriAylikOdeme = 1600.00 WHERE MusteriAd = 'Melike' AND MusteriSoyad = 'Özdemir'")
musteriler.commit()
Secilenler5 = imlec.execute("Select * From MusteriTablosu WHERE MusterID  = 153294")
Secilenler5.fetchall()

OUTPUT:

[(153294, 'Melike', 'Özdemir', 26, 'K', 4350, 12800, 8, 1600)]

Uygulama 7: MusteriID’si 625173 olan Salih Güven kişisini tablodan silelim.

INPUT:

imlec.execute("DELETE FROM MusteriTablosu WHERE MusterID = 625173")
musteriler.commit()
Secilenler6 = imlec.execute("Select * From MusteriTablosu")
Secilenler6.fetchall()

OUTPUT:

[(136752, 'Ahmet', 'Yenidoğan', 36, 'E', 4500, 3800, 6, 633.34),
 (127650, 'Ece', 'Gündüz', 28, 'K', 3655, 1760, 4, 440),
 (201638, 'Ali', 'Çelik', 46, 'E', 6500, 8900, 12, 741.67),
 (518023, 'Gizem', 'Duyar', 23, 'K', 3500, 2750, 12, 229.17),
 (812503, 'Aslı', 'Çevik', 26, 'K', 3000, 1650, 6, 550),
 (437612, 'Mehmet', 'Bekçi', 35, 'E', 6500, 4800, 6, 800),
 (356721, 'Betül', 'Çevreci', 26, 'K', 2800, 1400, 6, 233.34),
 (971025, 'Cenk', 'Kahraman', 33, 'E', 4250, 9800, 12, 816.67),
 (153294, 'Melike', 'Özdemir', 26, 'K', 4350, 12800, 8, 1600),
 (309852, 'Berk', 'İnan', 56, 'E', 3800, 2760, 12, 230)]

Uygulama 8: Müşteri tablosunda isminde A harfi olan kişileri listeleyelim.

INPUT:

Secilenler7 = imlec.execute("Select * From MusteriTablosu WHERE MusteriAd Like '%A%'")
Secilenler7.fetchall()

OUTPUT:

[(136752, 'Ahmet', 'Yenidoğan', 36, 'E', 4500, 3800, 6, 633.34),
 (201638, 'Ali', 'Çelik', 46, 'E', 6500, 8900, 12, 741.67),
 (812503, 'Aslı', 'Çevik', 26, 'K', 3000, 1650, 6, 550)]

Uygulama 9: Müşteri tablosunda soyadı Ç harfi ile başlayan kişileri listeleyelim.

INPUT:

Secilenler8 = imlec.execute("Select * From MusteriTablosu WHERE MusteriSoyad Like 'Ç%'")
Secilenler8.fetchall()

OUTPUT:

[(201638, 'Ali', 'Çelik', 46, 'E', 6500, 8900, 12, 741.67),
 (812503, 'Aslı', 'Çevik', 26, 'K', 3000, 1650, 6, 550),
 (356721, 'Betül', 'Çevreci', 26, 'K', 2800, 1400, 6, 233.34)]

Uygulama 10: Müşteri tablosunda ismi E harfi ile biten kişileri listeleyelim.

INPUT:

e("Select * From MusteriTablosu WHERE MusteriAd Like '%E'")
Secilenler9.fetchall()

OUTPUT:

[(127650, 'Ece', 'Gündüz', 28, 'K', 3655, 1760, 4, 440),
 (153294, 'Melike', 'Özdemir', 26, 'K', 4350, 12800, 8, 1600)]

Uygulama 11: Müşteri tablosunda geliri 3000 TL ya da 4500 TL olan kişilerin ad, soyad, maaş ve yaşını listeleyelim.

INPUT:

Secilenler10 = imlec.execute("Select MusteriAd, MusteriSoyad, MusteriGeliri, MusteriYas From MusteriTablosu WHERE MusteriGeliri IN(3000,4500)")
Secilenler10.fetchall()

OUTPUT:

[('Ahmet', 'Yenidoğan', 4500, 36), ('Aslı', 'Çevik', 3000, 26)]

Uygulama 12: Müşteri Tablosunda adında A harfi olmayan ve geliri 3500 TL, 4000 TL ya da 4800 TL olan kişilerin ad ve soyadlarını listeleyen sorguyu yazalım.

INPUT:

Secilenler11 = imlec.execute("Select MusteriAd, MusteriSoyad From MusteriTablosu WHERE MusteriAd NOT LIKE '%A%' AND MusteriGeliri IN(3500,4000,4800)")
Secilenler11.fetchall()

OUTPUT:

[('Gizem', 'Duyar')]

Uygulama 13: Müşteriler veri tabanına CihazTablosu isminde bir tablo oluşturalım. Bu tablonun içerisinde CihazID, CihazModel, CihazYıl ve CihazAd sütunlarını ekleyelim.

INPUT:

imlec.execute('''CREATE TABLE IF NOT EXISTS CihazTablosu(
                 CihazID INT NOT NULL, 
                 CihazModel Varchar(5), 
                 CihazYıl SMALLINT,
                 CihazAd Varchar(30))''')

Uygulama 14: Yeni oluşturduğumuz CihazTablosu isimli tabloya aşağıdaki verileri ekleyelim.

(“TBT16”, 2016, “Tablet”), (“BGR20”, 2020, “Bilgisayar”), (“TLN18”, 2018, “Telefon”), (“BZD19”, 2019, “Buzdolabı”), (“CMR21”, 2021, “Çamaşır Makinesi”), (“TVN21”, 2021, “Televizyon”)

INPUT:

cihazlar = [[1635,"TBT16", 2016, "Tablet"], [1654,"BGR20", 2020, "Bilgisayar"], [5643,"TLN18", 2018, "Telefon"], [4567,"BZD19", 2019, "Buzdolabı"], [1564,"CMR21", 2021, "Çamaşır Makinesi"], [4569,"TVN21", 2021, "Televizyon"]]
for cihaz in cihazlar:
 imlec.execute("INSERT INTO CihazTablosu VALUES (?,?,?,?)", cihaz)
musteriler.commit()
secilenler12 = imlec.execute("SELECT * FROM CihazTablosu")
secilenler12.fetchall()

OUTPUT:

[(1635, 'TBT16', 2016, 'Tablet'),
 (1654, 'BGR20', 2020, 'Bilgisayar'),
 (5643, 'TLN18', 2018, 'Telefon'),
 (4567, 'BZD19', 2019, 'Buzdolabı'),
 (4569, 'TVN21', 2021, 'Televizyon'),
 (1564, 'CMR21', 2021, 'Çamaşır Makinesi')]

Uygulama 15: Müşteri tablosuna SahipOlunanCihaz isimli ve veri türü INT olan bir sütun ekleyelim.

INPUT:

imlec.execute("ALTER TABLE MusteriTablosu ADD COLUMN SahipOlunanCihaz INT")
musteriler.commit()

Uygulama 16: Müşteri tablosuna yeni eklenen sütuna (1,3,5,6,2,4,3,5,1,6) değerlerini ekleyelim.

INPUT:

CihazNumaralari = [1,3,5,6,2,4,3,5,1,6]
MusteriNumaralari = [136752, 127650, 201638, 518023, 812503, 437612, 356721, 971025, 153294, 309852]
a = 0
for musteri in MusteriNumaralari:
 imlec.execute("UPDATE MusteriTablosu SET SahipOlunanCihaz = {} WHERE MusterID = {}" .format(CihazNumaralari[a], musteri))
 a += 1
musteriler.commit()
secilenler13 = imlec.execute("SELECT * FROM MusteriTablosu")
secilenler13.fetchall()

OUTPUT:

[(136752, 'Ahmet', 'Yenidoğan', 36, 'E', 4500, 3800, 6, 633.34, 1),
 (127650, 'Ece', 'Gündüz', 28, 'K', 3655, 1760, 4, 440, 3),
 (201638, 'Ali', 'Çelik', 46, 'E', 6500, 8900, 12, 741.67, 5),
 (518023, 'Gizem', 'Duyar', 23, 'K', 3500, 2750, 12, 229.17, 6),
 (812503, 'Aslı', 'Çevik', 26, 'K', 3000, 1650, 6, 550, 2),
 (437612, 'Mehmet', 'Bekçi', 35, 'E', 6500, 4800, 6, 800, 4),
 (356721, 'Betül', 'Çevreci', 26, 'K', 2800, 1400, 6, 233.34, 3),
 (971025, 'Cenk', 'Kahraman', 33, 'E', 4250, 9800, 12, 816.67, 5),
 (153294, 'Melike', 'Özdemir', 26, 'K', 4350, 12800, 8, 1600, 1),
 (309852, 'Berk', 'İnan', 56, 'E', 3800, 2760, 12, 230, 6)]

Bir sonraki yazımızda Python’dan bahsetmeye devam edeceğiz.

PYTN5JL10AJU0X299N
Java’da Döngüler

Bu yazıda sizlere JAVA’da yinelenen işlemlerin gerçekleştirildiği döngülerin neler olduğundan ve nasıl kullanıldığından bahsedeceğim. Genel olarak yazı içerisinde For ve while döngülerini inceleyeceğiz.

JAVA’da kod yazarken kodlarımızın içerisinde yinelenen işlemler olabilir. Örneğin 1’den 10’a kadar olan sayıları ekrana yazdırmak istediğimizi düşünelim. Bu durumda döngü kullanmadan 10 kez system.out.println() fonksiyonunu kullanmamız gerekir. Örnek olarak:

INPUT:

public class Main {
    public static void main(String[] args) {
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(4);
        System.out.println(5);
        System.out.println(6);
        System.out.println(7);
        System.out.println(8);
        System.out.println(9);
        System.out.println(10);
    }
}

OUTPUT:

1
2
3
4
5
6
7
8
9
10

Ancak bu işlemi manuel olarak gerçekleştirmek bizim için ideal değildir çünkü kodlarımızı yazarken aynı işlemleri içeren kod satırlarını elle tekrar tekrar yazmamız gerekir. Bu hem zamandan kaybetmemize hem de yazdığımız kodun daha karışık ve uzun hale gelmesine yol açacaktır. Dolayısıyla, hem kodlarımızı daha az çaba harcayarak yazmalıyız hem de daha az kod satırı ile daha çok işlem gerçekleştirebiliyor olmalıyız. Bu sebeple yinelenen işlemlerde döngüleri kullanırız. Döngülerin amacı, aynı veya benzer kodu birkaç kez tekrarlamaktır. Bu tekrarlama belirli bir sayı kadar ya da bir koşul sağlanana kadar sürebilir. JAVA’da iki çeşit döngü mevcuttur. Bunlar for döngüsü ve while döngüsüdür.

İlk olarak while döngüsünden bahsedelim.

WHILE Döngüsü

While döngüsü, döngüde yazdığımız şart doğru olduğu sürece kod bloğu içerisindeki işlemleri gerçekleştirmeye devam eden döngü tipidir. While döngüsü aşağıdaki gibi yazılır:

public class Main {
    public static void main(String[] args) {
        while (kosul) {
            //Yazılan koşulun değeri true ise çalıştıralacak kod bloğu
        }

    }
}

While döngüsünün kullanımına ilişkin örnekler aşağıdaki gibidir:

INPUT:

public class Main {
    public static void main(String[] args) {
        int i = 0;
        while (i < 5) {
            System.out.println("i değeri : " + i);
            i += 1;
         }

    }
}

OUTPUT:

i değeri : 0
i değeri : 1
i değeri : 2
i değeri : 3
i değeri : 4
INPUT:

public class Main {
    public static void main(String[] args) {
        boolean deger = true;
        int sonuc = 0;
        while (deger == true) {
            sonuc += 3;
            if(sonuc > 40) {
                System.out.println("Limit Değere Aşıldı! Son Değer : " + sonuc);
                deger = false;
            }
            }
         }

    }

OUTPUT: 

Limit Değere Aşıldı! Son Değer : 42

While döngüsünde, koşul doğru ise kod bloğu çalışır.  Eğer döngüde yazılan şartın doğru ya da yanlış olduğuna bakılmaksızın kod bloğunun en az bir kez çalıştırılmasını istersek dowhile döngüsünü kullanmamız gerekir. Dowhile döngüsünün kullanımı ve mantığı while döngüsüne benzerdir. Ancak farkı, şartın durumuna bakmaksızın kod bloğunu bir kez çalıştırır. Dowhile döngüsü aşağıdaki gibi yazılır:

public class Main {
    public static void main(String[] args) {
        do {
            //çalıştırılmak istenen kod bloğu
        }
        while (kosul);

         }

    }

Dowhile döngünün kullanımına ilişkin örnek aşağıdaki gibidir:

INPUT:

public class Main {
    public static void main(String[] args) {
        int toplam = 0;
        do{
            System.out.println("Toplam : " + toplam);
            toplam += 10;
        }while(toplam < 100);
        }
}

OUTPUT:

Toplam : 0
Toplam : 10
Toplam : 20
Toplam : 30
Toplam : 40
Toplam : 50
Toplam : 60
Toplam : 70
Toplam : 80
Toplam : 90
INPUT:

import java.util.Scanner;

public class Main
{
	public static void main(String[] args) {
     int sayi1, sayi2, i, enBuyuk, enKucuk;
     
     Scanner input = new Scanner(System.in);
     
     System.out.println("Lutfen ilk sayiyi giriniz : ");
     sayi1 = input.nextInt();
     
     System.out.println("Lutfen ikinci sayiyi giriniz : ");
     sayi2 = input.nextInt();     
     
     int k = 2;
     i = 2;
     enBuyuk = 1;
     while(sayi1 >= i){
         
         if((sayi1 % i == 0) && (sayi2 % i == 0)){
                 enBuyuk = i;
         }
         
         i++;
     }
     
     enKucuk = (sayi1 * sayi2) / enBuyuk;
     
     System.out.println("En buyuk ortak bolen : " + enBuyuk);
     System.out.println("En kucuk ortak bolen : " + enKucuk);
	}
}

OUTPUT:

Lutfen ilk sayiyi giriniz : 
60
Lutfen ikinci sayiyi giriniz : 
70
En buyuk ortak bolen : 10
En kucuk ortak bolen : 420
For Döngüsü

For döngüsü, yazılan kod bloğunun istenilen sayı kadar yinelenmesini istediğimiz durumlarda kullanılan döngü tipidir. For döngüsü aşağıdaki gibi yazılabilir:

public class Main {
    public static void main(String[] args) {
        for (baslangıcDegeri; dongununDevamınıSaglayanSart; ArtısAzalısDegeri) {
            //çalıştırılmak istenen kod bloğu
        }

        }
}

For döngüsü yazılırken, döngü içerisindeki ilk alana bir değişken tanımlanır ve başlangıç noktası verilir. Ardından hangi koşul sağlanana kadar döngünün devam etmesi gerektiği yazılır. Son olarak, döngü her sonlandığında, başlangıç noktasından nasıl ilerleme ya da gerileme yapılacağı belirtilir. Bu değerlere göre for döngüsü çalışır ve istenilen işlemleri gerçekleştirir. For döngüsünün kullanımına ait aşağıdaki örnekleri inceleyebiliriz:

INPUT:

public class Main
{
    public static void main(String[] args) {

        boolean sorgu = true;

        for(int i = 2; i <= 100; i++){

            for(int k = 2; k < i; k++){

                if(i %k == 0){
                    sorgu = false;
                }
            }
            if(sorgu == true){
                System.out.print(" " + i);
            }
            sorgu = true;
        }
    }
}

OUTPUT:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
INPUT:

import java.util.Scanner;

class HelloWorld {
    public static void main(String[] args) {
        int deger, us, sonuc;

        Scanner input = new Scanner(System.in);

        System.out.print("Lutfen bir deger giriniz : ");
        deger = input.nextInt();

        System.out.print("Lutfen bir us degeri giriniz : ");
        us = input.nextInt();

        sonuc = 1;

        for(int i = 0; i < us; i++){

            sonuc *= deger;

        }

        System.out.println("Sonuc : " + sonuc);

    }
}

OUTPUT:

Lutfen bir deger giriniz : 6
Lutfen bir us degeri giriniz : 2
Sonuc : 36

For döngüsü, bir başlangıç noktasından belirtilen koşul altında bir bitiş noktası boyunca belirli bir kod bloğunu tekrar tekrar çalıştırmanın dışında diziler üzerinde de kullanılabilir. Dizi üzerinde yazdığımız for döngüsü, dizinin her bir elemanını dolaşır ve istediğimiz işlemleri dizi elemanları üzerinde gerçekleştirir. Bu tip bir for döngüsünün kullanımı aşağıdaki gibidir:

class HelloWorld {
    public static void main(String[] args) {
        for (VeriTipi degiskenIsmı : diziIsmı) {
            //Çalıştırılması istenen kod bloğu
        }

    }
}

Yukarı yazdığımız for döngüsü tipine ait örnekler aşağıdaki gibidir:

INPUT:

class HelloWorld {
    public static void main(String[] args) {
      String[] dizi = {"Ahmet", "Mehmet", "Ali","Ayşe","Cansu","Gizem"};
      for(String eleman:dizi){
          if (eleman == "Ayşe"){
              System.out.println("Dizide " + eleman + " elemanına erişildi!");
              break;
          }
      }
    }
}

OUTPUT:

Dizide Ayşe elemanına erişildi!

Bu yazımızda son olarak while ve for döngüsünde kullanabileceğimiz break ve continue komutlarını kullanışlarından bahsedeceğiz. Break komutunun switchcase yapısında ne amaçla ve nasıl kullanıldığı görmüştük. Döngülerde de break komutunun kullanılma mantığı aynıdır.

Döngü içerisinde belli bir koşul sağlanmışsa ya da belli bir değere geldiğimizde döngünün sonlanmasını isteyebiliriz. Bu durumda döngü içerisinde break komutunu kullanabiliriz. Break komutu çalıştığı anda, döngünün devam etmesi gerekse bile döngüden çıkış yapılacaktır.

Örneğin, içerisinde 4 adet isim olan {“Ahmet”, “Mehmet”, “Ayşe”, “Fatma”} kümesini düşünelim. Bu küme üzerinde bir döngü yazalım. Öyle ki döngü, dizi içerisinde Ayşe ismine uğradığında döngüden çıkış yapsın. Bu döngüyü aşağıdaki gibi yazabiliriz:

INPUT:

public class Main {
    public static void main(String[] args) {
        String[] isimler = {"Ahmet", "Mehmet", "Ayşe", "Fatma"};
        for (String i : isimler) {
            if (i == "Ayşe"){
                System.out.println("Şu anki değer Ayşe olduğundan döngüden çıkıldı.");
                break;
            }else{
                System.out.println(i);
            }
        }
    }
}

OUTPUT:

Ahmet
Mehmet
Şu anki değer Ayşe olduğundan döngüden çıkıldı.

Yukarıda da görüldüğü gibi döngünün uğraması gereken Fatma ismi varken Ayşe’ye denk geldiğinde döngüden çıkıldı ve Fatma ismine hiç uğramadı.

Bu gibi durumlarda döngüden çıkılması istenirse break komutu kullanılabilir.

Continue komutu ise döngünün içerisinde herhangi değere ya da koşula denk gelindiğinde döngünün o basamağını atlamak için kullanılır. Döngü continue çalıştırdığı anda o an ki döngü basamağını atlar ve işlemleri gerçekleştirmeden sonraki döngü adıma geçiş yapar. Sonraki döngü adımında eğer continue’u içeren bloğa girmezse döngü bloğundaki işlemleri gerçekleştirir.

Örneğin, basit olarak 1’den 10’a kadar ekrana yazı yazdırmayı düşünelim. Ekrana bu sayıları yazdırırken 5 sayısının ekrana yazılmadan atlanmasını ve diğer sayıların ekrana yazılmasının devam etmesini isteyelim. Continue komutunu kullanarak bu isteği aşağıdaki gibi gerçekleştirebiliriz:

INPUT:

public class Main {
    public static void main(String[] args) {
    for(int i = 0; i <= 10; i++){
        if (i == 5){
            continue;
        }
        System.out.println(i);
    }
    }
}

OUTPUT:

0
1
2
3
4
6
7
8
9
10

Yazımızı for ve while döngüleri için birkaç örnek daha yaparak sonlandıralım.

INPUT:

import java.util.Scanner;

class HelloWorld {
    public static void main(String[] args) {
        int deger,toplam, basamak, deger1;

        Scanner input = new Scanner(System.in);
        System.out.print("Sayi Giriniz : ");
        deger = input.nextInt();

        deger1 = deger;
        toplam = 0;

        while (deger1 != 0) {
            basamak = deger1 % 10;
            toplam += basamak;
            deger1 /= 10;
        }

        System.out.println("Basamaklar toplami : " + toplam);
    }
}

OUTPUT:

Sayi Giriniz : 16
Basamaklar toplami : 7
INPUT:

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int ilkSayi = 0, ikinciSayi = 1, toplam,deger;
        System.out.print("N Sayısını Girin:");
        deger = input.nextInt();
        System.out.print(ilkSayi+" "+ikinciSayi);

        for(int i = 2 ; i < deger + 1; ++i){
            toplam = ilkSayi + ikinciSayi;
            System.out.print(" "+toplam);
            ilkSayi = ikinciSayi;
            ikinciSayi = toplam;

        }
        System.out.println();
    }

}

OUTPUT:

N Sayısını Girin:8
0 1 1 2 3 5 8 13 21
INPUT:

import java.util.Scanner;

public class Main
{
    public static void main(String[] args) {


        Scanner input = new Scanner(System.in);

        System.out.print("Lutfen kac sayi girilecek? : ");
        int n = input.nextInt();

        System.out.print("Lutfen deger giriniz : ");
        int ilkDeger = input.nextInt();

        int enKucuk = ilkDeger;
        int enBuyuk = ilkDeger;
        for(int i = 0; i < n-1; i++){

            System.out.print("Lutfen deger giriniz : ");
            int deger = input.nextInt();

            if(deger > enBuyuk){
                enBuyuk = deger;
            }
            if(deger < enKucuk){
                enKucuk = deger;
            }
        }
        System.out.println("En buyuk deger : " + enBuyuk);
        System.out.println("En kucuk deger : " + enKucuk);
    }
}

OUTPUT:

Lutfen kac sayi girilecek? : 5
Lutfen deger giriniz : 15
Lutfen deger giriniz : 45
Lutfen deger giriniz : 321
Lutfen deger giriniz : 54
Lutfen deger giriniz : 34
En buyuk deger : 321
En kucuk deger : 15
INPUT:

import java.util.Scanner;

class Patika_Java_101 {
    public static void main(String[] args) {
        int nBitis;
        double toplam;

        Scanner input = new Scanner(System.in);

        System.out.print("Lutfen n sayisinin bitis degerini yaziniz : ");
        nBitis = input.nextInt();

        toplam = 0;

        for(double i = 1; i <= nBitis; i++){
            toplam += (1/i);
        }

        System.out.println("Harmonik Toplam : " + toplam);

    }
}

OUTPUT:

Lutfen n sayisinin bitis degerini yaziniz : 6
Harmonik Toplam : 2.4499999999999997

JAVA’da dizilerden bahsettiğimiz bir sonraki yazımıza buradan ulaşabilirsiniz.

JAVA9US7B9AB2H5L3R
Java’da If-Else Blokları
If – Else Blokları

Bu yazıda sizlere JAVA’da koşul bloklarını kullanabilmemizi sağlayan ifelse ve switchcase bloklarından bahsedeceğim. ifelse blokları diğer programlama dillerinde olduğu gibi JAVA’da da sık sık kullanılan ve önemli bir yere sahip ifadelerdir. ifelse blokları sayesinde yazdığımız kodlar içerisine koşullara bağlı farklı çıktı veren ya da farklı işlemler gerçekleştiren kod blokları ekleyebiliriz.

ifelse blokları, programcı tarafından mantıksal bir boolean koşulunun doğru ya da yanlış olmasına göre belirtilen eylemleri gerçekleştirmeye yarayan özelliktir. ifelse bloklarının JAVA’daki kullanımları aşağıdaki gibidir:

if (kosul1) {

  //kosul1 koşulunun true olması durumunda çalıştırılacak kod bloku

}else if (kosul2) {

  //kosul1 koşulunun false ve kosul2 kosulunun true olması durumunda çalıştırılacak kodu bloku

}else{

  //kosul1 koşulunun false ve kosul2 kosulunun false olması durumunda çalıştırılacak kodu bloku

}

Eğer ki yazdığımız kodun tek bir koşul altında farklı bir aksiyon göstermesini istiyorsak sadece if bloğunu da kullanabiliriz. Örneğin, verdiğimiz bir sayı karşılığında programın o sayının çift olduğu durumlarda dışarıya “Bu bir çift sayıdır.” yazmasını isteyelim. Diğer durumlarda programın herhangi bir aksiyon göstermemesini isteyelim. Bu durumda aşağıdaki gibi bir kod bloğu isteğimizi gerçekleştirebilir.

INPUT:

public class Main {
    public static void main(String[] args) {
        int A = 4;

        if (A % 2 == 0){
            System.out.println("Girdiğiniz sayı çift sayıdır");
        }

        }
}

OUTPUT:

Girdiğiniz sayı çift sayıdır.

Aynı zamanda aynı if bloğu içerisinde birden fazla koşula bağlı kodlar da yazabiliriz. Bunun için else if bloğunu devreye sokabiliriz. Yukarıdaki örneği çift sayıların dışında tek sayılar girildiğinde de “Bu bir tek sayıdır.” cümlesini ekrana gösterecek şekilde güncelleyelim. Böylece bu örnek için 3 koşul yazmamız gerekecektir. Bunlardan ilki verilen sayının çift olduğu durumdur, ikincisi, sayının tek olduğu durumdur ve sonuncusu ise verilen sayının bu iki koşulu da sağlamayan bir sayı olması durumudur. Örneğin verdiğimiz sayı bir ondalıklı sayı olabilir. Bu durumda bu sayı için 3. koşul devreye girer. Örneği aşağıdaki kod bloğu ile inceleyelim.

INPUT: 

public class Main {
    public static void main(String[] args) {
        double A = -5.2;

        if (A % 2 == 0){
            System.out.println("Girdiğiniz sayı çift sayıdır.");
        } else if (A % 2 == 1 || A % 2 == -1) {
            System.out.println("Girdiğiniz sayı tek sayıdır.");
        }else{
            System.out.println("Girdiğiniz sayı tam sayı değildir!");
        }

    }
}

OUTPUT:

Girdiğiniz sayı tam sayı değildir!

else ifadesi, yazdığımız if ve else if bloklarının hepsinin False olduğu durumda devreye girer ve hiçbir koşulun sağlanmadığı durumlarda alması istenilen aksiyonları gerçekleştirir.

ifelse bloklarında eğer ki ilk if koşulu sağlanırsa, koşul sağlandığında gerçekleştirilecek işlemler gerçekleştirilir ve ifelse bloğundan çıkılır.  if koşulu sağlanmazsa, if bloğundan sonra varsa else if bloğu true ise çalıştırılır ancak false ise ve başka else if bloğu varsa o çalıştırılır. Hiçbir else if bloğu true olmazsa ve else bloğu varsa else bloğu çalıştırılarak program sonlandırılır. Yani ifelse blokları yukarıdan aşağı olacak şekilde ifelse if – else yolu izlenerek çalıştırılır.

if bloğunu çalıştırırken dikkat etmemiz gereken noktalardan biri de if’in yazılış şeklidir. Eğer ki “İf” ya da “İF” şeklinde yazacak olursak if bloğu çalışmaz ve çıktı olarak bize hata döndürür. Kod bloğunda “if” şeklinde yazılmalıdır.

INPUT:

public class Main {
    public static void main(String[] args) {
        int A = 3;
        int B = 5;
        int C = 7;

        if (A > B && A > C && B > C){
            System.out.println("En büyük değer : " + A + " Ortanca değer : " + B + " En küçük değer : " + C);
        } else if (A > B && A > C && C > B) {
            System.out.println("En büyük değer : " + A + " Ortanca değer : " + C + " En küçük değer : " + B);
        } else if (B > A && B > C && C > A) {
            System.out.println("En büyük değer : " + B + " Ortanca değer : " + C + " En küçük değer : " + A);
        } else if (B > A && B > C && A > C) {
            System.out.println("En büyük değer : " + B + " Ortanca değer : " + A + " En küçük değer : " + C);
        } else if (C > B && C > A && A > B) {
            System.out.println("En büyük değer : " + C + " Ortanca değer : " + A + " En küçük değer : " + B);
        }else{
            System.out.println("En büyük değer : " + C + " Ortanca değer : " + B + " En küçük değer : " + A);
        }

    }
}

OUTPUT:

En büyük değer : 7 Ortanca değer : 5 En küçük değer : 3

ifelse bloklarının dışında koşul blokları oluşturmak için switchcase bloklarını da kullanabiliriz.

Switch-Case Blokları

Eğer birden fazla koşul içeren kod blokları yazmak istersek ifelse blokları dışında switchcase kod bloklarını da kullanabiliriz. Bu kod bloklarının çalışma mantığı ifelse’e benzer olup sonucu true olan koşulun bloğu çalıştırıldıktan sonra blok sonlandırılır. Switchcase kullanımı aşağıdaki gibidir:

INPUT:

switch(expression) {

case x:

  //Koşul sağlandığında çalıştırılacak kod bloğu

case y:

  //Koşul sağlandığında çalıştırılacak kod bloğu

}

Switchcase kullanımı daha kolay anlayabilmek için aşağıdaki örneği inceleyebiliriz.

INPUT:

public class Main {
    public static void main(String[] args) {
        int gun = 4;
        switch(gun) {

            case 1:

                System.out.println("Pazartesi");
                break;

            case 2:

                System.out.println("Salı");
                break;

            case 3:

                System.out.println("Çarşamba");
                break;

            case 4:

                System.out.println("Perşembe");
                break;

            case 5:

                System.out.println("Cuma");
                break;

            case 6:

                System.out.println("Cumartesi");
                break;

            case 7:

                System.out.println("Pazar");
                break;
        }

    }
}

OUTPUT:

Perşembe

Birden çok koşulun dahil olduğu switchcase bloklarında bir koşul sağlandıktan ve sağlanan koşulun kod bloğu çalıştırıldıktan sonra, kod bloğundan çıkılmasını istersek break komutunu kullanabiliriz. Bu ifade ile birlikte blok içerisinde daha fazla kod çalıştırılmasının önüne geçebiliriz. Break komutunun kullanımına dair yukarıdaki örneği inceleyebiliriz.

Break komutunu bize kod bloğunun çalıştırılma süresinden kazanç sağlayabilir. Bunun sebebi sadece sonucu true olan koşulun kodunun çalıştırılmasından ve diğer blokların atlanmasından dolayıdır.

Break komutunun dışında switchcase bloklarında hiçbir koşulun sağlanmadığı durumlar için default anahtar kelimesini kullanabiliriz. Bu anahtar kelime, hiçbir koşul sağlanmadığında varsayılan olarak çalıştırılması istenen kod satırlarını içerebilir. default komutu switchcase bloklarının en sonunda kullanılırsa break komutu ile beraber çalıştırılmasına gerek yoktur. default komutunun kullanımına dair örneği aşağıda inceleyebilirsiniz.

INPUT:

public class Main {
    public static void main(String[] args) {
        String sehir = "Sivas";
        switch(sehir) {

            case "İstanbul":

                System.out.println("Marmara Bölgesi");
                break;

            case "İzmir":

                System.out.println("Ege Bölgesi");
                break;

            case "Antalya":

                System.out.println("Akdeniz Bölgesi");
                break;

            case "Samsun":

                System.out.println("Karadeniz Bölgesi");
                break;

            default:

                System.out.println("Girmiş olduğunuz şehir başka bir bölgeye aittir.");
                break;
        }

    }
}

OUTPUT:

Girmiş olduğunuz şehir başka bir bölgeye aittir.

ifelse ve switchcase dışında kısa koşul ifadeleri ile de koşul blokları oluşturmamız mümkündür. Önceki yazılarımızda da bahsettiğimiz bu yöntemin kullanılışı aşağıdaki gibidir:

degisken = (kosul) ? dogruİfade :  Yanlısİfade;

Yukarıda da görüldüğü gibi bu ifade üç işlenenden oluştuğundan üçlü operatör olarak da isimlendirilebilir.

INPUT:

public class Main {
    public static void main(String[] args) {
     //degisken = (kosul) ? dogruİfade :  Yanlısİfade;

        String kelime1 = "Edirne";
        String kelime2 = "Ankara";

        String degisken = (kelime1.length() == kelime2.length()) ? ("İki kelimenin uzunluğu aynıdır.") : ("İki kelimenin uzunluğu aynı değildir.");
        System.out.println(degisken);

    }
}

OUTPUT:

İki kelimenin uzunluğu aynıdır.

Bu yazımızda sizlere JAVA’da kullanabileceğimiz koşul bloklarından bahsettim. Bir sonraki yazımızda JAVA’dan bahsetmeye devam edeceğiz.

JAVAVBZ0921LHO19WO
Java’da Operatörler

Bu yazıda sizlere JAVA’da kullanılan operatörlerden bahsedeceğim. Genel olarak yazı içerisinde mantıksal, aritmetiksel, koşul, atama ve karşılaştırma operatörlerine ve örneklerine değineceğim.

Operatörler

Operatörler, JAVA’da pek çok işlem esnasında kullanabileceğimiz ifadelerdir. Operatörler sayesinde matematiksel işlemler, değişkenlerin sahip olduğu değerleri karşılaştırma işlemi veya mantıksal işlemleri gerçekleştirebiliriz.

JAVA’da operatörleri aşağıdaki gibi ifade edebiliriz:

  • Mantıksal Operatörler
  • Aritmetik Operatörler
  • Karşılaştırma Operatörleri
  • Atama Operatörleri

Yukarıda yer alan operatör grupları içerisindeki operatörleri tablolar halinde ifade edeceğiz. Ardından operatörlerin kullanımlarına ilişkin örnekleri inceleyeceğiz.

Karşılaştırma Operatörleri

Karşılaştırma Operatörleri iki değeri karşılaştırmak için kullanılır. Aşağıdaki tabloda karşılaştırma operatörlerini görebilirsiniz.

OperatörAçıklama
==Eşittir
!=Eşit değil
Büyüktür
Küçüktür
>=Büyük ya da eşit
<=Küçük ya da eşit

Yukarıdaki tabloda yer alan karşılaştırma operatörlerini kullandığımızda çıktı olarak True ya da False ifadelerini görürüz. Bu yaptığımız karşılaştırmanın doğru olduğunu ya da yanlış olduğunu ifade eder. Örnek vermek gerekirse girdi olarak 6 > 7 ifadesini verirsek çıktı olarak False değerini alırız. Bu 6’nın 7’den büyük olmadığını ifade eder.

Tabloda yer alan operatörlerin kullanımlarına ilişkin örnekler aşağıdaki gibidir:

INPUT:

public class Main {
    public static void main(String[] args) {
        int sayi1 = 5;
        int sayi2 = 1;

        System.out.println(sayi1==sayi2);
        System.out.println(sayi1!=sayi2);
        System.out.println(sayi1>sayi2);
        System.out.println(sayi1<sayi2);
        System.out.println(sayi1>=sayi2);
        System.out.println(sayi1<=sayi2);
    }
}

OUTPUT:

false
true
true
false
true
false

Atama Operatörleri

JAVA’da bir değişkene değer atamak için atama operatörlerini kullanılır. Sol tarafta yazılan değişkene sağ tarafta yazılan değer atanır. Başlıca atama operatörleri tablodaki gibidir:

OperatörÖrnekAçıklama
=x = 10x’e 10’u atar.
+=x += 10x’e 10 ekler.
-=x -= 10x’ten 10 çıkarır.
*=x *= 10x’i 10 ile çarpar.
/=x /= 10x’i 10’a böler.
%=x %= 10x’in 10 ile bölümünden kalanı x’e atar.
INPUT:

public class Main {
    public static void main(String[] args) {
        int sayi1 = 10;

        System.out.println(sayi1 += 10);
        System.out.println(sayi1 -= 10);
        System.out.println(sayi1 *= 10);
        System.out.println(sayi1 /= 10);
        System.out.println(sayi1 %= 10);

    }
}

OUTPUT:

20
0
100
1
0

Aritmetiksel Operatörler

Aritmetiksel operatörler, çoğunlukla matematiksel işlemleri gerçekleştirmek için kullanılan operatörlerdir. Bunun dışında string ifadelerin toplanması gibi işlemlerde de aritmetiksel operatör kullanılabilir. Aritmetiksel operatörleri aşağıdaki tabloda görebiliriz.

OperatörİsimKullanımı
+Toplamaa + b
Çıkartmaa – b
*Çarpmaa * b
/Bölmea / b
%Mod Almaa % b
INPUT:

public class Main {
    public static void main(String[] args) {
        int sayi1 = 4;
        int sayi2 = 2;

        System.out.println(sayi1 + sayi2);
        System.out.println(sayi1 - sayi2);
        System.out.println(sayi1 * sayi2);
        System.out.println(sayi1 / sayi2);
        System.out.println(sayi1 % sayi2);
        }
}

OUTPUT:

6
2
8
2
0

Mantıksal Operatörler

Mantıksal operatörler sayesinde birden fazla koşulun dahil olduğu kod blogları yazabiliriz. Bu operatörler kullanıldığında sonuç olarak True ya da False değerleri döner. Döngülerde ya da ifelse bloklarında mantıksal operatörler sıklıkla kullanılır. Aşağıdaki tablo ile mantıksal operatörleri inceleyebiliriz.

OperatörİsmiAnlamıKullanımı
&&Ve operatörüİki ifade doğruysa True döndürür.A > 5 && A < 10
||Veya operatörüİki ifadeden biri doğruysa True döndürür.A > 5 || A < 10
!Değil operatörüMantıksal durumu tersine çevirir. True ise False döndürür.not(A > 5 && A < 10)
INPUT:

public class Main {
    public static void main(String[] args) {
        int A = 4;
        int B = 2;

        System.out.println(A > 5 && B < 10);
        System.out.println(A > 5 || B < 10);
        System.out.println((!(A > 5 && B < 10)));

        }
}

OUTPUT:

false
true
true

Burada bahsettiklerimizin dışında ifelse bloklarını içermeden nasıl koşul ifadesi içeren kodlar yazabileceğimizden bahsedelim.

JAVA’da yazdığımız kodların belli koşullara göre farklı sonuçlar vermesini ya da farklı işlemler gerçekleştirmesini isteyebiliriz. Bu gibi durumlar ifelse bloklarının dışında koşul operatörlerini kullanabiliriz.

Koşul içeren bir ifadeyi aşağıdaki gibi yazabiliriz:

degisken = (kosul) ? (kosul sonunda True yapılması istenen) : (kosul sonunda False yapılması istenen)

Koşul ifadeleri sayesinde kodumuzu belli şartlara ya da verilere göre çalışabilir hale getirebiliriz. İstenen ya da istenmeyen şartlar altında kodlarımız kullanıcıya nasıl tepki vermesi gerektiğini belirleyebiliriz. Bunların dışında koşul ifadeleri ile birlikte daha büyük ve kompleks kod blokları oluşturabiliriz.

INPUT:

public class Main {
    public static void main(String[] args) {
        int A = 4;
        int B = 2;
        String sonuc = (A > 5 && B < 10) ? ("Bu kosul doğrudur"):("Bu kosul yanlıştır.");
        System.out.println(sonuc);


        }
}

OUTPUT:

Bu kosul yanlıştır.

Bir sonraki yazılarımızda Java’da gerçekleştirilen işlemlerden bahsetmeye devam edeceğiz.

JAVA3N3AQ4SI94U18Z
Postman Post Metodu

Bu yazıda sizlere Postman’de Post komutunun nasıl kullanılabileceğinden ve örneklerinden bahsedeceğim. Önceki yazılarımızda Post metodundan bahsetmiştik. Yazımıza başlarken Post metodunun ne olduğunu tekrar hatırlayalım.

Post metodu, sunucuda var olmayan, istek mesajının içerisindeki verileri sunucuda oluşturmak için kullanılan bir HTTP metodudur.  Post metodunun kullanımı GET metoduna benzerdir. Göndereceğimiz isteğin Post metodu olmasını istiyorsak Postman’de istek oluşturduğumuzda istek tipimizi “POST” olarak güncellememiz gerekir.

Bir önceki yazımızda Postman arayüzünden ve isteklerin nasıl oluşturulabileceğinden bahsetmiştik. Bu yazımızda bu bilgileri kullanarak Post metodunu kullanmaya başlayalım. İlk olarak önceki yazımızda kullanmış olduğumuz otel rezervasyonu örneğini içeren restful-booker sitesi üzerinde post metodunu deneyelim. Bu sayfadaki dokümantasyona buradaki linkten erişebilirsiniz.

Dökümantasyonu incelediğimizde token oluşturmak için POST metodunun kullanıldığını görebiliriz.

Yukarıdaki görselde de gördüğümüz gibi token oluşturabilmek için “Headers” ve “Body” alanlarına değerler göndermemiz gerekiyor. Bu değerlere varsayılan değerleri göndererek token alalım. Bu işlemi Postman’de aşağıdaki gibi yapabiliriz:

Yukarıda da görüldüğü gibi ileride ihtiyacımız olacak token’i almış olduk. Burada dikkat edilmesi gereken nokta her bu isteği gönderdiğimizde token değişecektir. Bu durum token’nin kullandığı diğer yerlerde sorun yaratabilir. Statik olarak kullandığımız bu token başka yerlerde kullanılıyorsa güncellenmesi gerekir. İlerleyen yazılarımızda bu gibi değerler nasıl dinamik hale getirilebileceğinden bahsedeceğiz.

Bu sayfada yer alan dökümanda “Booking – CreateBooking” alanına gidelim. Burada yeni bir rezervasyon oluşturabiliriz.

Yukarıdaki görsele baktığımızda “Headers” ve “Body” alanlarında göndermemiz gereken değerleri görüyoruz. Bu değerleri kullanarak bir rezervasyon oluşturalım. Bu işlem Postman’de aşağıdaki gibi gerçekleştirilebilir:

İlk olarak “Body” alanına yazılması gereken verileri istediğimiz şekilde düzenleyerek ekledik. Ardından “Headers” alanını düzenleyeceğiz ve isteğimizi göndereceğiz.

İsteği gönderdiğimizde yukarıda da görüldüğü gibi rezervasyonumuz oluştu. Rezervasyon id’sini kullanarak GET metodu ile bu rezervasyonu çekelim.

Görsele baktığımızda oluşturduğumuz rezervasyonu GET metodunu kullanarak çekebildiğimizi görürüz.

Daha çok örnek yapmak adına JSONPlaceholder sitesine gidelim. Burada bir önceki yazımızda GET metodunu kullanarak sahte verileri çekmiştik. Şimdi ise burada sahte veriler oluşturalım. Sayfaya buradaki link üzerinden erişebilirsiniz.

Bu sayfada yer alan /posts alanına sahte bir veri eklemesi yapalım. Oluşturmaya çalışacağımız veri oluşacak ancak sayfaya yansımayacaktır. Bu işlemi Postman’de aşağıdaki gibi yapabiliriz:

İlk olarak “Body” alanına oluşturacağımız verileri yazdık. Bu işlemin ardından “Headers” alanını düzenleyip isteğimizi gönderelim.

Yukarıda da gördüğümüz gibi oluşturmak istediğimiz sahte veri oluşturuldu ve sonuç olarak ekranımıza yansıdı.

Yazımızın son bölümünde FakeRESTApi sayfasında yer alan post isteklerini deneyelim. Bu sayfaya buradaki linkten erişebilirsiniz.

Burada ilk olarak aktivite oluşturmayı deneyelim. Sayfayı incelediğimizde aktivite oluşturma isteğini görüyoruz.

Yukarıdaki görsel de de görüldüğü gibi isteğin “Body” alanında değerler göndermemiz gerekiyor. Aynı zamanda “Headers” alanında “Accept” ve “Content-Type” değerler “application/json” olmalıdır. Bu işlemi Postman’de aşağıdaki gibi gerçekleştirebiliriz:

Body” alanına istediğimi değerleri yazdıktan sonra “Headers” alanını düzenleyelim ve isteğimizi gönderelim.

Görselde de gördüğümüz gibi post isteğimiz “200 OK” ile sonuçlandı. Bu istek ile Futbol Maçı adında 05-05-2022 tarihine kadar yapılması gereken ve tamamlanmamış bir aktivite tanımladık.

Sayfada biraz daha ilerlediğimizde “Authors” alanını görüyoruz. Burada post metodunu kullanarak bir yazar oluşturalım.

Görseli incelediğimizde bir önceki örnekte olduğu gibi yine “Body” alanında değerler göndermemiz gerekiyor. Bu işlemi Postman’de aşağıdaki gibi gerçekleştirebiliriz:

Son olarak post metodu ile kitap tanımlaması yapalım.

Örnek isteği incelediğimizde “Body” kısmında göndermemiz gereken değerleri görüyoruz. Bu değerleri ve “Headers” alanını düzenledikten sonra isteğimizi gönderebiliriz. Beklentimiz “Status” değerinin “200 OK” olmasıdır. Bu işlemi Postman’de aşağıdaki gibi gerçekleştirelim:

Görselde de görüldüğü gibi post çağrımız başarı ile sonuçlandı.

Bu yazımızda sizlere Postman’de post sorgusunun nasıl kullanabileceğimizden ve örneklerinden bahsettim. İleri ki yazılarımızda daha çok GET ve POST metotlarını içeren örnekleri inceleyeceğiz. Bir sonraki yazıda Postman’den bahsetmeye devam edeceğim. Bir sonraki yazıya buradan erişebilirsiniz.

PSTMNKP0B00B1O2FIL
Postman’de Get Metodu

Bu yazıda sizlere Postman’de GET metodunun ne olduğundan ve nasıl kullanıldığından örnekleriyle bahsedeceğim. İlk olarak Postman’in ne olduğunu tekrar hatırlayalım.

Postman, yazılımcıların ya da yazılım test mühendislerinin API’leri tasarlamasına, oluşturmasına ve test etmesine olanak sağlayan bir uygulamadır.

Get metodu ise Postman’de testlerimizi gerçekleştirirken kullanabileceğimiz metotlardan biridir. Get metodunu kullanarak sunucu üzerinden istediğimiz parametreye bağlı veri ya da verileri çekebiliriz.

Postman uygulamasını ilk açtığımızda aşağıdaki gibi bir ekran karşımıza gelebilir:

Postman Uygulaması Giriş Ekranı

Postman ile isteklerimizi iletebilmemiz için ilk önce bir çalışma alanı(workspace) oluşturmamız gerekir. Bunun için yukarıdaki görselde de görüldüğü gibi “Workspaces” alanına tıklanır ve ardından ekrana gelen küçük pencerede “Create Workspace” denilir.

Workspace Oluşturma

Ekrana gelen yukarıdaki pencere doldurulur. Summary kısmi isteğe bağlıdır. Görünürlük ayarları tek kişi ya da takım olarak çalışmak istediğinize göre değişiklik gösterir. Ben tek başına çalışacağımdan “Personal” seçeneğini seçtim.

Bu işlemlerin ardından çalışma alanı(workspace) oluşturulmuş olur. Oluşturduğumuz bu çalışma alanı içerisine koleksiyon oluşturmamız gerekir. Göndereceğimiz istekler bu koleksiyon altında yer alır. Koleksiyon oluşturmak için Postman uygulamasının sol tarafında bulunan alandan “+” simgesine basabiliriz.

Eğer daha önce koleksiyon oluşturmadıysanız ekranın sol tarafında “Create collection” ifadesini görebilirsiniz. Bu tuşa basarak da koleksiyon oluşturabilirsiniz.

Koleksiyon Ekleme

İstek gönderebilmek için son olarak koleksiyonlar altında istekler oluşturmamız gerekir. Bunun için koleksiyon ismindeki üç noktaya tıklayarak “Add Request” dememiz gerekir. Eğer ilk defa istek oluşturuyorsak koleksiyon altında “Add Request” ifadesini görebiliriz. Buraya tıklayarak da istek oluşturabiliriz.

İstek Ekleme

Oluşturduğumuz bu koleksiyonların isimlerini değiştirmek mümkündür. Bunun için koleksiyon ismine tıkladıktan sonra sağ tarafa gelen pencerede koleksiyon ismini düzenleyebiliriz.

Add request” dedikten sonra otomatik olarak bir GET metodunu içeren bir istek tanımlanır. Ekranın sol tarafında bu istek değiştirebilir. Ayrıca bu alanda göndereceğimiz istek detaylarını barından alanlarda mevcuttur.

Postman’de GET isteği

Yukarıdaki görselde gördüğümüz alanları birer birer inceleyelim. Görselde GET metodunun seçili olduğu alan, isteğimizi hangi metot ile göndermek istediğimizi seçtiğimiz alandır. Bu alana tıklandığında diğer metotları görmek mümkündür.

Enter request URL” yazan alan isteği göndereceğimiz URL bilgisinin yazılacağı alandır.

Params” alanı isteğin barındırması gereken parametleri içeren alandır.

Headers” alanı istek içerisinde gitmesi gereken değerler var ise kullanılan alandır.

Pre-request Script” alanı istek gönderilmeden önce çalıştırılmasını istediğimiz scriptler var ise kullanılan alandır.

Tests” alanı istek gönderildikten sonra çalıştırılmasını istediğimiz scriptler var ise kullanılan alandır.

Body” alanı istek içerisinde gitmesi gereken değerler var ise kullanılan alandır.

Send tuşuna basıldığında istek gönderilir. İstek başarılı ise 200’lü bir kod geri döner ve istek içerisinde istediğimiz veriler karşımıza gelir. Eğer istek başarısız ise hata kodu döner.

Postman’de yaptığımız her isteği kaydetmemiz gerekir. Aksi taktirde hazırladığımız ve kullandığımız istekler kaybolur. Bunun için görselde de görülen Save tuşu kullanılmalıdır.

Buraya kadar yaptıklarımızda Postman’in arayüzünü kısaca tanımış olduk. Şimdi ise postman ile istekler gönderelim.

İlk olarak restful-booker sitesindeki otel rezarvasyon uygulamasına istek atalım. Bu istekler ve metotlar hakkında daha fazla detayı buradaki api dökümantasyon linkinden erişebilirsiniz.

Dökümantasyona göz attığımızda PUT ve DELETE işlemleri için token oluşturmamız gerektiğini görüyoruz. Bu yazımızda bu metotları kullanmayacağımız için token oluşturmadan devam edelim. Bizim bu yazımızdaki amacımız var olan veriyi çekebilmektir.

Dökümanda biraz daha aşağılara indiğimizde “Booking – GetBookingIds” alanını görürüz. Burada var olan rezarvasyonların id’lerini alabiliriz.

Bu istek için kullanmamız gereken URL’i yukarıda görebiliriz. Bu URL ile birlikte kullanılabilecek opsiyonel parametrelerin neler olduğunu da yukarıdaki görselden inceleyebiliriz.

Bu isteği Postman’de aşağıdaki gibi hazırlayabiliriz:

Herhangi bir parametre göndermediğimizde URL’i yazmamız yeterli oldu. Send tuşuna bastığımızda aşağıdaki gibi bir cevap alırız:

Görselin sağ üst köşesinde görebileceğimiz üzere isteğimiz “200 OK” yani başarılı bir şekilde sonuçlanmış ve karşımıza rezervasyon id’leri getirilmiştir. Eğer ki dökümantasyonda gördüğümüz gibi opsiyonel parametreler ile isteğimizi yenilersek aşağıdaki gibi bir sonuç elde ederiz:

Görselde de gördüğümüz gibi gönderdiğimiz istekte firstname ve lastname adında iki parametre ekledik ve var olan bir kişinin oluşturmuş olduğunu rezervasyonun id’sine eriştik.

Şimdi ise bir rezervasyon id’sini kullanarak var olan bir rezervasyonu çağıralım. Bunun için dökümantasyon’da “Booking – GetBooking” alanına gelelim.

Görselden de görebileceğimiz gibi bu istek için “Header” alanına bir değer göndermemiz gerekiyor. Varsayılan olarak “application/json” gönderelim. Aynı zamanda rezervasyon bilgisine erişmek istediğimiz id parametresini eklememiz gerekiyor. Bu isteği Postman’de aşağıdaki gibi gönderebiliriz.

Yukarıdaki görsellere baktığımızda ilk olarak “Headers” alanına “accept: application/json” yazdık. Ardından dökümantasyonda verilen URL’i yapıştırdık. URL’de değişken tanımlandığından Params alanına otomatik olarak gelir. Query ve Path parametreleri birbirinden farklıdır. Bu konuya ileriki yazılarımızda değineceğiz. İlgili değerleri yazdıktan sonra isteğimizi gönderdik ve görselde de görüldüğü gibi rezervasyon bilgisine eriştik. İsterseniz sizde bu alanda başka id’ler ile istekler gönderebilirsiniz. Dikkat etmeniz gereken nokta bu id’lerin tanımlı olmasıdır.

Get metodunu kullanabileceğimiz başka bir api dokümantasyonuna geçelim. Bu dokümantasyona buradaki linkten erişebilirsiniz.

İnceleyeceğimiz site genderapi adında isme göre cinsiyet bulan bir web sitesidir. Burada dokümantasyona baktığımızda isme göre cinsiyetleri çekmek istediğimizde api anahtarına ihtiyacımız olduğunu görüyoruz. Bu api anahtarına erişebilmek için siteye üye olmamız gereklidir

Api anahtarını elde ettikten sonra isteğimizi göndermek için tekrar dokümantasyona bakalım.

Görselde de gördüğümüz gibi iki parametreye ihtiyacımız var. Bunlar api anahtarı ve isim parametreleridir. Bu isteği postman’de aşağıdaki gibi gönderebiliriz.

Bu isteği gönderdiğimizde aşağıdaki gibi bir cevap alırız:

Cevabı incelediğimizde kullandığımız kredi, toplam isim sayısı, ismin en çok kullanıldığı ülke ve kalan kredi gibi bilgileri görebiliriz.

Yukarıdaki isteğe benzer bir istekle çoklu isim araması da gerçekleştirebiliriz. Dökümantasyon’da “Çoklu İsim Sorgusu” alanına geldiğimiz göndermemiz gereken isteğin detaylarını görebiliriz.

Bu isteği Postman’de aşağıdaki gibi gönderebiliriz:

Bu isteğin sonucunda elde edeceğimiz cevap aşağıdaki gibidir:

Bu yazımızda son olarak JSONPlaceholder websitesinde yer alan sahte verileri çekmek için GET metodunu kullanalım. Bu siteye buradaki linkten ulaşabilirsiniz.

Siteye girdiğimiz kullanmamız gereken URL ve kaynakları görebiliriz. Burada ilk olarak kaynaklar altındaki /posts alanında var olan userId’si 10 olan kişinin attığı postları çekelim. Bu isteği Postman’de aşağıdaki gibi gönderebiliriz:

Bu istek sonucunda gelen cevap aşağıdaki gibi olur:

userId’si 10 olan kişinin attığı birden fazla post olduğundan hepsi ekranımıza geldi. Eğer ki sadece post id’si 91 olan post gelsin istersek Postman’de parametre alanına bu parametreyi ekleyerek tekrar istek gönderebiliriz. Örnek olarak:

Yazımızı daha fazla uzatmadan son olarak kaynaklar altındaki /photos alanından albumId’si 5 ve fotoğraf id’si 217 olan fotoğrafı çekelim. Bu istek postman’de aşağıdaki gibi gönderilebilir:

Bu yazımızda sizlere postman’de GET metodunun nasıl kullanılabileceğinden ve örneklerinden bahsettim. Bir sonraki yazımızda postman’de post metodunun nasıl kullanılabileceğinden ve örneklerinden bahsedeceğim. Bir sonraki yazımıza buradan ulaşabilirsiniz.

PSTMN5BZ9JKU6YZY4X
Api Yaşam Döngüsü Nedir Ve Http Metotları Nelerdir?

Postman Nedir?

Postman, yazılımcıların ya da yazılım test mühendislerinin API(Application Programming Interface/ Uygulama Programlama Arayüzü)’leri tasarlamasına, oluşturmasına ve test etmesine olanak sağlayan bir uygulamadır. Basit kullanıcı arayüzü sayesinde sayesinde API yaşam döngüsünün her aşamasını yönetmeyi kolaylaştırır. Kullanıcı arayüzünün basit olması sayesinde daha iyi API’ler daha hızlı bir şekilde oluşturulabilir.

Postman sayesinde hem kendi yaptığımız hem de başkaları tarafından yapılan API’leri test edebiliriz. Bu uygulama sayesinde basit veya karmaşık http metotları oluşturabilir, kaydedebilir ve gelen yanıtları inceleyebiliriz. Postman uygulamasına erişmek için buradaki linke gidebiliriz.

API Yaşam Döngüsü  

API Yaşam Döngüsü

API, birçok yazılım bileşen ve sistemlerinin bir arada çalışmasına, birbirleri arasında iletişim ve etkileşim sağlamasına olanak sağlayan bir yazılımdır. API’leri günlük hayatımızda internette gezerken pek çok yerde kullanmamız mümkündür. Örneğin Google takvim, Google hava durumu ya da herhangi bir sitede Facebook ve Google gibi hesaplarla oturum açma işlemi.

API’lerde birer yazılım olduklarından yaşam döngülerine sahiptirler. API yaşam döngüsü 5 aşamadan oluşur. Bunlar planlama, geliştirme, test, dağıtım ve kullanımdan kaldırmadır.

Planlama

Diğer tüm yazılım geliştirme aşamalarından olduğu gibi API geliştirme süreci de planlama aşaması ile başlar. Bu aşamada geliştirme ekibi API’nin hangi hizmetleri gerçekleştirmesini ve yeteneklerinin neler olması gerektiğini belirler. Geliştirme için iş ihtiyaçları kararlaştırıldıktan sonra işlevsel ve işlevsel olmayan gereksinimler belirlenir.

Geliştirme

Planlama aşamasında gereksinimleri belirlenen API, bu aşamada gereksinimlere bağlı kalınarak geliştirilir. API’ler PHP, Java, C# ve Python gibi programlama dilleri kullanılarak yazılabilir.

API’ler tek bir kişi tarafından geliştirilebileceği gibi ekip olarak da geliştirilebilir. Ekip ile birlikte geliştirme yapmak kodlama ve test aşaması gibi birçok noktada işleri kolaylaştırmayı sağlar. Ekip olarak API geliştirildiğinde ekip içerisindeki paydaşlar API kodu, dökümantasyon ve test dosyaları gibi kaynaklara sıkıntısız erişebiliyor olmalıdır.

Test

Yazılımcılar ve yazılım test uzmanları geliştirilen API’nin işlevsel ve performans sorunlarını içermediğini kapsamlı testler gerçekleştirerek kontrol etmeleri gerekir. Yazılım test uzmanları geliştirilen API’nin testi sırasında karşılaştıkları hataların çözülmesi için yazılım geliştiricileri ile iletişime geçmeli ve çözülen hata için doğrulama amaçlı tekrar test etmeleri gerekmektedir.

Test aşamasında koşulan işlevsel testler, geliştirilen yazılımdaki her bir özelliğin veya fonksiyonun planlama aşamasında belirlendiği gibi çalışıp çalışmadığını kontrol eder. Performans testleri ise API’nin yük altında, düzensiz trafik ve öngörülemeyen yüklenme koşullarında nasıl performans gösterdiğini değerlendirmek için koşulur. Bu testlerin ardından kabul testleri ile uygulamanın uçtan uca gerçekleştirebildiği fonksiyonlara odaklanıp, API’nin beklenen amaca ulaşıp ulaşmadığı kontrol edilir. Böylece API’nin son kalitesine dair güven oluşturulmuş olur.

Dağıtım

API’ler beklenen amaca uygun ve güvenli olduğunda dağıtıma hazırdır. Tamamlanmış API’lerin kullanıcıların keşfetmesi ve kullanması için güvenli bir ortama dağıtımı gerçekleştirilir. Yüksek kaliteli API’ler için dağıtımdan sonra API’ler izlenmelidir.

Kullanımdan Kaldırma

Yazılım geliştiriciler, yazılımların kalitelerini ve iş değerlerini artırmak için zaman içinde yazılımı genişletebilir veya güncelleyebilirler. Ancak zaman geçtikçe yazılım ekipleri eski API’leri ya da API sürümlerini kullanımdan kaldırırlar. Bu durum API yaşam döngüsündeki doğal bir aşamadır. Böylece yazılım ekiplerini destekleyen kaynakları boşa harcamamış olurlar.

API’lerin eski sürümlerinden yeni sürümlerine geçiş yapılırken bu geçiş yolunun özenle planlanması gerekir. API’nin günlük kullanımları önemli ölçüde etkilemeden durdurmak için yazılım geliştirme ekiplerinin kullanım ömrü planı hazırlaması gereklidir.

Buraya kadar Postman’den ve Postmanin her aşamasını kolaylaştırdığı API yaşam döngüsünden bahsettik. Postman’den bahsederken basit veya karmaşık http metotları oluşturabileceğimizden bahsetmiştim. Şimdi ise HTTP metotlarından bahsedelim.

HTTP METOTLARI

HTTP, bir veri transfer metodudur. Sunucuya gönderilen tüm HTTP metotlarına karşılık sunucu tarafından belirli kodlar ile cevap dönülür. Bu cevaba “HTTP Response” denir. Bu HTTP metotları sayesinde uygulamanın arayüzü ve önyüzü etkileşim kurup veri transferi gerçekleştirebilir.

Başlıca HTTP metotları GET, POST, PUT, PATCH ve DELETE’dir.

GET Metodu

GET metodu, sunucuda var olan bir bilgiyi okumak için kullanılan bir metottur. SQL’deki “Select” komutuna benzetebiliriz. Bu metot ile herhangi bir değişiklik gerçekleştiremeyiz.

POST Metodu

POST metodu, sunucuda bir şey oluşturmak için kullanılan metottur. Bu metot SQL’deki “Create” komutuna benzetebiliriz. Örneğin bu metot ile sunucuya müşteri bilgilerini gönderip bir müşteri oluşturabiliriz.

PUT Metodu

PUT metodu ile sunucuda var olan bir bilgiyi, bu metot ile gönderilen bilgi ile değiştirebilir veya güncelleyebiliriz. Eğer bilgi sunucuda yok ise bu metot ile oluşturulur.

DELETE Metodu

DELETE metodu ile sunucu üzerinde var olan bir bilginin silme işlemini gerçekleştirebiliriz. Örneğin sunucuda var olan müşteriyi DELETE metodu ile silebiliriz.

PATCH Metodu

PATCH metodu ile sunucu üzerinde var olan verinin kısmi bilgilerini güncellemek için kullanılır. Örneğin sunucuda var olan müşterinin e-posta adresini güncellemek istersek PATCH metodunu kullanabiliriz.

Bu metotların dışında kullanılan HTTP metotları mevcuttur. Ancak onlara bu yazımızda değinmeyeceğiz. Bu metotlar ile sunucuya bir istek gönderildiğinde sunucu tarafından bize bir cevap dönülür. Şimdi ise sunucudan gelebilecek cevaplara göz atalım.

Cevap Kodları

Uygulama arayüzünü test ederken kullandığımız bu HTTP metotlarına sunucu tarafından dönülen cevaplar ile gönderdiğimiz isteklerin sonuçlarını inceleyebilir ve test senaryolarımızı ilerletebiliriz. Gönderdiğimiz her bir isteğe karşılık sunucu bize aşağıdaki tabloda yer alan cevap kodlarına benzer cevaplar döner. Her bir cevap kodunun bir anlamı vardır.

KodTürüAnlamı
1XXBilgiİsteğin sunucu tarafından alındığını ve sürecin devam ettiğini belirtir.
2XXBaşarılıİstek başarıyla alındı ve kabul edildi.
3XXYönlendirmeİsteğin tamamlanabilmesi için daha fazla işlem yapılması gerektiğini belirtir.
4XXİstemci Hatasıİstek hatalı söz dizimi içerdiğinden yerine getirilemiyor.
5XXSunucu HatasıSunucu geçerli olan isteği yerine getiremiyor.

Tabloda verilen her bir kod grubunun içerisindeki hata kodlarının kendine özgü bir açıklaması mevcuttur. Bu yazıda genel olarak hata kod gruplarının ne ifade ettiğinden bahsetmek için yukarıdaki gibi bir tablo oluşturduk.

Bir sonraki yazımızda Postman’den bahsetmeye devam edeceğiz. Buraya tıklayarak sonraki yazımıza gidebilirsiniz.

PSTMN59GQL76605085
Java’da Veri Tipleri Ve String Fonksiyonları

Bu yazıda sizlere JAVA’da değişkenleri tanımlarken kullanabileceğimiz veri tiplerinden bahsedeceğim. Genel olarak yazı içerisinde ilkel ve ilkel olmayan veri tiplerinin neler olduğundan bahsedeceğim ve ardından birkaç örnek ile nasıl kullanılabileceklerini göstereceğim.

JAVA’da veri tipleri ikiye ayrılır. Bunlardan ilki JAVA’da varsayılan olarak gelen veri tipleridir. Bu veri tiplerine ilkel veri tipleri denir.

JAVA’da kullanılabilen diğer veri tipleri ise kullanıcı tarafından tanımlanabilen ilkel olmayan veri tipleridir.

Değişkenleri tanımlarken değişkenin veri tipini mutlaka belirtmemiz gerekir. Ayrıca bir değişken hangi veri tipinde tanımlanmışsa o veri tipinde değer ataması gerçekleştirilmelidir. Aksi takdirde programımız çalıştığında hata alacaktır.

İlk olarak JAVA’da varsayılan olarak gelen ilkel veri tiplerinden bahsedelim.

İlkel Veri Tipleri

JAVA’da ilkel olan 8 tane veri tipi vardır. Bunlar byte, short, int, long, float, double, boolean ve char’dır.

Byte: -128’den 127’e kadar olan tamsayıları saklar. Bellek’te 1 bayt boyutunda yer kaplar. byte anahtar kelimesi ile kullanılır.

byte sayi = 2;

Short: -32,768’den 32,767 kadar olan tam sayıları saklar. Bellek’te 2 bayt boyutunda yer kaplar. short anahtar kelimesi ile kullanılır.

short sayi = 30000;

integer: -2,147,483,648’den 2,147,483,647 kadar olan tam sayıları saklar. Bellek’te 4 bayt boyutunda yer kaplar. int anahtar kelimesi ile kullanılır.

int sayi = 50;

long: -9,223,372,036,854,775,808’den 9,223,372,036,854,775,807 kadar olan tam sayıları saklar. Bellek’te 8 bayt boyutunda yer kaplar. Long veri tipindeki bir değişkene değer atanırken değerin sonuna ‘L’ eklenmelidir. long anahtar kelimesi ile kullanılır.

Long sayi = 50L;

float: Ondalık sayıları saklamak için kullanılır. 1.4×10^-45 ile 3.4×10^38 aralığında bir değer tanımlanabilir. Float veri tipindeki bir değişkene değer atanırken değerin sonuna ‘f’ eklenmelidir. Bellek’te 4 bayt boyutunda yer kaplar. float anahtar kelimesi ile kullanılır.

float sayi = 36.70f;

Double: Ondalık sayıları saklamak için kullanılır. 4.9×10^-324 ile 1.8×10^308 aralığında bir değer tanımlanabilir. Bellek’te 8 bayt boyutunda yer kaplar. Double veri tipindeki bir değişkene değer atanırken değerin sonuna ‘d’ eklenmelidir. double anahtar kelimesi ile kullanılır.

double sayi = 36.7054354d;

Boolean: Mantıksal bir veri tipi olan boolean, True ve False olmak üzere iki değere sahiptir. Mantıksal olarak doğru olan duruma True, yanlış olan duruma ise False değeri karşılık gelir. boolean anahtar kelimesi ile kullanılır. Bellek’te 1 bit boyutunda yer kaplar.

boolean statu = true;

Char: Verilen herhangi bir karakterin kendisini ya da ASCII tablosunda karşılık gelen değerini saklamak için kullanılan veri tipidir. Bellek’te 2 bayt boyutunda yer kaplar. char anahtar kelimesi ile kullanılır.

char karakter = ‘C’;

char karakter = 65;

Buraya kadar ki bölümde ilkel veri tiplerinden ve örneklerinden bahsettik. Şimdi ise ilkel olmayan veri tiplerinden bahsedelim.

Java’da tanımladığımız değişkenlerin veri tiplerini öğrenmek için .getClass() metodunu ya da instanceOf ifadesini kullanabiliriz. Böylelikle tanımladığımız değişkenlerin sınıflarını görebiliriz. Örnek kullanım aşağıdaki gibidir:

INPUT:

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.getClass());
    }
}

OUTPUT:

class java.lang.String
INPUT:

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize instanceof String);
    }
}

OUTPUT:

true
İlkel Olmayan Veri Tipleri

Daha öncede bahsettiğim gibi ilkel olmayan veri tipleri JAVA’da tanımlı olmayan programcı tarafından tanımlanan veri tipleridir.  Bu veri tiplerinin örnekleri aşağıdaki şekildeki gibidir:

İlkel Olmayan Veri Tipleri

Biz bu yazımızda sadece String veri tipinden bahsedeceğiz. Diğer başlıklara sonraki yazılarımızda değineceğiz.

String: String, çift tırnak içerisine yazılabilen bir ya da daha fazla harf, sayı veya özel karakterlerden oluşan bir dizidir. Tırnaklar arasına yazılan her karakter dizenin bir parçasıdır.

String dize = “Merhaba”;

JAVA’da String, dizeler üzerinde belirli işlemleri gerçekleştirebilen metodları içeren bir nesnedir. Bu sebeple string ifadeler üzerinde bazı fonksiyonları kullanarak işlemler gerçekleştirebiliriz.

String Fonksiyonları

length() Fonksiyonu : String ifadeler içerisindeki karakter sayısını bulmak için kullanılan fonksiyondur.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.length());
    }
}

toUpperCase() Fonksiyonu: String ifadeler içerisindeki tüm karakterleri büyük olarak yazmak için kullanılır.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.toUpperCase());
    }
}

toLowerCase() Fonksiyonu: String ifadeler içerisindeki tüm karakterleri küçük olarak yazmak için kullanılır.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.toLowerCase());
    }
}

indexOf Fonksiyonu: IndexOf fonksiyonu belirtilen ifadenin string içerisinde geçtiği ilk konumu bulmak için kullanılır. Çıktı olarak metnin string içerisinde başladığı index numarasını döndürür. Index numarasını sayarken boşluklarda dahil edilir.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.indexOf("a"));
    }
}

contains() Fonksiyonu: İçerisine yazdığımız karakterin ya da karakter grubunun string içerisinde var olup olmadığını sorgular. Çıktı olarak True ya da False döndürür.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.contains("a"));
    }
}

endsWith() Fonksiyonu: String ifadenin belirtilen karakter ya da karakter grupları ile bitip bitmediğini sorgular. Çıktı olarak True ya da False döndürür.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.endsWith("a"));
    }
}

equals() Fonskiyonu : İki string ifadeyi karşılaştırmak için kullanılır. Eğer string ifadeler eşitse True değilse False döndürür.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       String dize1 = "Dünya";
       System.out.println(dize.equals(dize1));
    }
}

isEmpty() Fonksiyonu: Bir string ifadenin içerisinin boş olup olmadığını sorgulamak için kullanılır. Çıktı olarak True ya da False döndürür.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.isEmpty());
    }
}

replace() Fonksiyonu: Cümle içerisindeki bir karakteri ya da kelimeyi istenilen karakter veya kelime ile değiştirmek için kullanılan fonksiyondur.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.replace("e","a"));
    }
}

startsWith() Fonksiyonu: String ifadenin belirtilen karakter ya da karakter grupları ile başlayıp başlamadığını sorgular. Çıktı olarak True ya da False döndürür.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       System.out.println(dize.startsWith("a"));
    }
}

trim() Fonksiyonu: String ifade içerisindeki sağdan ve soldan boşlukları silmek için kullanılır.

public class Main
{
    public static void main(String[] args) {
       String dize = " Merhaba ";
       System.out.println(dize.trim());
    }
}

concat() Fonksiyonu: İki string ifadeyi birleştirmek için kullanılan fonksiyondur.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       String dize1 = " Dünya";
       System.out.println(dize.concat(dize1));
    }
}

İki veya daha fazla string ifadeyi birleştirmek için concat() fonksiyonunun dışında “+” operatörü de kullanılabilir.

public class Main
{
    public static void main(String[] args) {
       String dize = "Merhaba";
       String dize1 = "Dünya";
       System.out.println(dize + " " + dize1);
    }
}

İlkel veri tipleri ile ilkel olmayan veri tiplerinden bahsettiğimize göre şimdi bu iki grubun arasındaki farklara göz atalım.

İlkel Veri Tipleri İle İlkel Olmayan Veri Tipleri Arasındaki Farklar

İlkel veri tipleri ile ilkel olmayan veri tipleri arasındaki temel farklara aşağıdaki tablodan göz atabiliriz.

İlkel Veri Tipleriİlkel Olmayan Veri Tipleri
Java’da tanımlıdır.Kullanıcı tarafından tanımlanır.
Boş değer alamaz.Boş değer alabilir.
Boyutu veri türüne bağlıdır.Tümü aynı boyuta sahiptir.
Küçük harf ile başlar.Büyük harfle başlar.

Bu yazımızda JAVA’daki ilkel ve ilkel olmayan veri türlerinden bahsedip örnek kullanımlarını gördük. Aynı zamanda ilkel ve ilkel olmayan veri türleri arasındaki farkları da incelemiş olduk. Bir sonraki yazımızda JAVA’dan bahsetmeye devam edeceğiz.

JAVAG33L1R9L08D32S
Java ile Temel Programlama #2

Bu yazımızda sizlere JAVA’da temel ifadelerden bahsetmeye devam edeceğim. Genel olarak yazı içerisinde yorum satırları, kaçış ifadeleri, değişkenler ve veri tiplerinden bahsedeceğim.

Java’da yazdığımız her ifadenin derleyici tarafından kod olarak algılanması istemeyiz. Bunun nedeni yazdığımız kodun ya da yaptığımız işlemlerin, kodu okuyanlar tarafından daha iyi bir şekilde anlaşılması için yorumlar eklemek isteyebiliriz. Bu gibi durumlar için JAVA bizlere yorum satılarını kullanma imkanı sunar. Bir ya da daha fazla satırı yorum satırı olarak işaretlediğimizde derleyici tarafından o satırların kod olarak değerlendirilmemesini sağlarız.

Yorum satırları kod yazarken herhangi bir anda kullanılabilir. Bu kullanma sıklığı kodu yazan kişiye bağlıdır. Herhangi bir hazır fonksiyonun detaylarını incelediğinizde ya da orta-büyük projelere göz attığınızda yorum satılarının sıklıkla kullanıldığını görebilirsiniz.

JAVA’da Yorum Satırları

Programlama dillerine göre yorum satılarının kullanım şekillleri değişebilir. JAVA’da yorum satırının 3 farklı kullanım şekli vardır. Bunlardan ilki tek satırlık yorum satırı oluşturmak için kullanılan // işaretidir. Bu işareti kullandığımız satır farklı bir renkte yorum satırı olarak gözükür. Buraya Türkçe karakter içeren ifadelerde yazılabilir. Tek satırlık yorum satırı örneği aşağıdaki gibidir:

public class HelloWorld{

     public static void main(String []args){
      //Bu bir yorum satiridir.
     }
}

Eğer ki birden fazla satırı kullanarak kodumuzu açıklamak istersek /* … */ ifadelerini kullanabilir. /* ile başlayan ve */ ile biten satırlar arasına istediğimiz şekilde açıklamalar yazabilir. Bu yazılan açıklamalarda derleyici tarafından kod statüsüne alınmaz. Yukarıdaki tek satırlık yorum satırında olduğu gibi bu alanlara da Türkçe karakterli ifadeler yazılabilir. /* … */ ifadesinin kullanım örneği aşağıdaki gibidir:

public class HelloWorld{

     public static void main(String []args){
      /*
      Bu bir yorum satırıdır.
      
      Bu da bir yorum satırıdır.
      
      Bu da yorum satırıdır.
      
      */
      
     }
}

Son olarak /** … */ ifadesinden bahsedelim. Bu ifade genel olarak kod içi dökümantasyon amacıyla kullanılır. Uygulamalar yazıldıktan sonra raporlamaları yapılır. Kod geliştirmesi yapılırken kullanılan bu ifadeler arasına yazılan açıklamalar, özel etiketler içerebilirler. Kullanılan özel etiketleri tanıyan uygun bir araç vasıtasıyla bu açıklamalar dökümantasyonlara dönüştürülebilir. Bu dökümantasyonlar raporlar arasına eklenerek yazılım geliştiren ekibin rapor yükünü hafifletir.

/** … */ ifadesi içerisinde kullanılabilecek bazı özel etiketler aşağıdaki tabloda verilmiştir.

EtiketAçıklamaKullanış Şekli
@authorSınıfı oluşturan kişiyi ifade eder.@author yazar adı
{@code}Yazılan kodun derleyici tarafından kod olarak değerlendirilmeden kullanım örneğini vermek için kullanılır.{@code …}
@exceptionDökümantasyona, yazılan kodun istisnai durumlarını yazmak ve açıklamak için kullanılır.@exception istisnai durum
@paramKullanılan parametreleri ve bu parametlerin açıklamaları için kullanılır.@param parametre ismi – açıklaması
@returnKullanılan metodlardan döndürülen ifadelerin açıklaması için kullanılır.@return açıklama
@seeHerhangi başka bir ifadeyi referans göstermek için kullanılır. Örneğin başka bir metot.@see referans
@sinceDökümantasyonda, oluşturulan ifadeler için tarih bilgisi eklenilmesinde kullanılır.@since tarih
@versionOluşturulan dökümantasyonlara versiyon bilgisi eklemek için kullanılır.@version versiyon numarası
/**
* @author  Erhan Eskin
* @version 1.0
* @since   01-01-2022
*/

public class OrtalamaHesaplama{
    /** 
    *Bu sinif icerisinde tanimlayacagimiz uc degisken ile
    *degiskenlere atadigimiz degerleri toplayip
    * toplam degisken sayisina bolecegiz
    * bu islemi simdilik statik olarak gerceklestirecegiz
    * @param sayi1 bizim ilk degiskenimiz olacak
    * @param sayi2 bizim ikinci degiskenimiz
    * @param sayi3 bizim ucuncu degiskenimiz
    * @param toplam bizim dorduncu degiskenimiz
    * @param ortalama bizim besinci degiskenimiz
    * bu islemlerin ardindan sonuc olarak
    * @return ortalama ifadesini ekranda gorecegiz
    * 
    */ 
    
    public int ortalamaHesaplama (int sayi1, int sayi2, int sayi3) {
            int toplam,ortalama;
            toplam = sayi1 + sayi2 + sayi3;
            ortalama = toplam / 3;
            return ortalama;
   }


    public static void main(String[] args) {
        int hesap1;
        OrtalamaHesaplama nesne = new OrtalamaHesaplama();
        hesap1 = nesne.ortalamaHesaplama(20,30,40);
        System.out.println("ortalama :" + hesap1);
    }
}

Kodlama yaparken kullanabileceğimiz yorum satırlarımızdan bahsettiğimize göre şimdi kaçış operatörlerinden bahsedelim.

JAVA’da Kaçış Operatörleri

JAVA’da kullanılabilen kaçış operatörlerinden bazılarını aşağıdaki tablodan inceleyebilirsiniz.

Kaçış OperatörüAçıklaması
\tBir tab boşluğu ekler.
\nBir satır aşağı atlar.
\rSatır başı ekler.
\fSayfa sonunu belirtir.
\’Tek tırnak ekler.
\’’Çift tırnak ekler
\\Ters eğik çizgi ekler.

JAVA’da kaçış operatörlerini kullanarak yazdığımız kodların okunabilirliğini artırabiliriz. Kaçış operatörlerinin kullanımlarına ait örnek aşağıdaki gibidir:

INPUT:

public class Main
{
    public static void main(String[] args) {
        System.out.println("Bu bir\ndeneme boşluğudur");
    }
}

OUTPUT:

Bu bir
deneme boşluğudur
INPUT:

public class Main
{
    public static void main(String[] args) {
        System.out.println("Bu bir\tdeneme boşluğudur");
    }
}

OUTPUT:

Bu bir	deneme boşluğudur

Bu yazımızın son bölümünde değişkenler ve veri tiplerinden bahsederek yazımızı sonlandıralım.

JAVA’da Değişkenler Ve Veri Tipleri

Değişken (variable), girdiğimiz ya da atadığımız bazı değerlerin geçiçi olarak hafızada saklanması için oluşturulan alanlara denir. Bir değişkene herhangi bir değer atamak için “ = ” ifadesi kullanılır. Örnek olarak:

int deger = 4

Değişkenler sayesinde kullanacağımız ifadeleri hafıza saklar ve gerektiği durumlarda kullanırız. Bir değişken tanımlanırken belirtilen veri tipindeki değerleri saklayabilir. Örneğin int olarak tanımladığımız bir değişkene string(dize) bir değer ataması gerçekleştirirsek program bize çıktı olarak hata verir. Böyle durumlarda yazdığımız programımız basit bir sebepten dolayı kesintiye uğramış olur.

Eğer tanımlamış ve değer atamış olduğumuz bir değişkene tekrar değer ataması yapılırsa son atanan değer o değişkenin değeri olur.

JAVA’da değişkenlerin tanımlabileceği farklı veri tipleri vardır. Bu veri tipleri JAVA’da varsayılan olarak gelen ilkel veri tipleri olabilirken kullanıcının kendi tanımlayabileceği veri tipleri de olabilir. İlkel veri tiplerinin her zaman bir değeri vardır. İlkel olmayan veri tipleri boş olarak tanımlanabilir.

Bunların dışında ilkel veri tiplerinin boyutları veri tipine göre değişikleri gösterirken ilkel olmayan veri tiplerinin boyutları aynıdır.

JAVA’da değişken aşağıdaki gibi tanımlanabilir:

veri tipi değişken adı = deger

Aşağıdaki tabloda JAVA’da var olan 8 ilkel veri tipini inceleyebilirsiniz.

Veri TipiBoyutAçıklama
byte1 bayt-128’den 127 kadar olan tam sayıları saklar.
short2 bayt-32,768’den 32,767 kadar olan tam sayıları saklar.
int4 bayt-2,147,483,648’den 2,147,483,647 kadar olan tam sayıları saklar.
long8 bayt-9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807 aralığında olan tam sayıları saklar.
float4 baytOndalık sayıları saklamak için kullanılır. 1.4×10^-45 ile 3.4×10^38 aralığında bir değer tanımlanabilir.
double8 baytOndalık sayıları saklamak için kullanılır. 4.9×10^-324 ile 1.8×10^308 aralığında bir değer tanımlanabilir.
boolean1 bitTrue ya da False adında mantıksal bir değer saklamak için kullanılır.
char2 baytHerhangi bir karakterin ASCII tablosundaki değerini saklar.

Yukarıdaki tabloyu incelediğimizde JAVA’da var olan ilkel veri tiplerini özetle incelemiş olduk. Bir sonraki yazımızda JAVA’da var olan bu ilkel veri tiplerinde örneklerden ve ilkel olmayan veri tiplerinden bahsedeceğiz. Bir sonraki yazıya buradan erişebilirsiniz.

JAVAECWJQP43S6OG9J