Javascript İle Dinamik Bir Etkileşimli Kredi Hesaplama Aracı Nasıl Yapılır?

Javascript İle Dinamik Bir Etkileşimli Kredi Hesaplama Aracı Nasıl Yapılır?
Javascript İle Dinamik Bir Etkileşimli Kredi Hesaplama Aracı Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Projeye başlamadan önce modern bir tarayıcı (Chrome, Firefox veya Edge) ve temel bir kod editörü (VS Code önerilir) yeterlidir. 2026 yılı standartlarına uygun olarak, kodlarımızı ES6+ (ECMAScript 6 ve üzeri) sözdizimi ile yazacağız. Herhangi bir harici kütüphane kullanmadan, saf JavaScript (Vanilla JS) kullanarak performanslı ve hızlı bir çözüm üreteceğiz.

  • HTML5: Arayüzün iskeletini oluşturmak için.
  • CSS3: Tasarımın modern ve kullanıcı dostu görünmesi için.
  • JavaScript (ES6+): Hesaplama mantığı ve etkileşim için.

Temel HTML Yapısının Oluşturulması

İlk adım olarak, kullanıcının kredi tutarı, vade sayısı ve faiz oranını girebileceği bir form alanı oluşturmalıyız. HTML yapısında id seçicilerini doğru kullanmak, JavaScript tarafında verilere erişimimizi kolaylaştıracaktır.

Kredi Tutarı (TL): Yıllık Faiz Oranı (%): Vade (Ay): Hesapla

Burada input alanlarının type="number" olarak belirlenmesi, kullanıcının metin girmesini engelleyerek veri temizleme (data validation) sürecini basitleştirir.

JavaScript ile Veri Yönetimi ve Hesaplama Mantığı

Kullanıcı "Hesapla" butonuna tıkladığında, formdaki değerleri alıp matematiksel formüllerle işlememiz gerekir. Aylık taksit hesaplama formülü: Taksit = (Kredi Tutarı * (Faiz / 100) * (1 + Faiz / 100)^Vade) / ((1 + Faiz / 100)^Vade - 1) şeklindedir.

const calculateBtn = document.getElementById('calculateBtn');

calculateBtn.addEventListener('click', () => {
  const amount = parseFloat(document.getElementById('loanAmount').value);
  const rate = parseFloat(document.getElementById('interestRate').value) / 100 / 12;
  const term = parseInt(document.getElementById('loanTerm').value);

  if (amount > 0 && rate > 0 && term > 0) {
    const monthlyPayment = (amount * rate * Math.pow(1 + rate, term)) / (Math.pow(1 + rate, term) - 1);
    displayResult(monthlyPayment.toFixed(2));
  } else {
    alert("Lütfen geçerli değerler giriniz.");
  }
});

Bu kod bloğunda, Math.pow fonksiyonu üs alma işlemini gerçekleştirir. toFixed(2) metodu ise sonucu virgülden sonra iki basamak olacak şekilde yuvarlar.

Dinamik Sonuç Tablosu Oluşturma

Hesaplanan sonucu sadece bir metin olarak göstermek yerine, kullanıcıya daha profesyonel bir tablo sunmak deneyimi iyileştirir. JavaScript ile DOM üzerinde yeni elementler oluşturarak bu tabloyu ekrana basabiliriz.

function displayResult(monthlyPayment) {
  const resultArea = document.getElementById('resultArea');
  resultArea.innerHTML = `
    
AçıklamaTutar
Aylık Taksit${monthlyPayment} TL
`; }

Bu yöntemle, kullanıcı her hesaplama yaptığında tablo içeriği dinamik olarak güncellenir. innerHTML kullanımı burada basit bir çözüm olsa da, büyük projelerde createElement kullanımı daha güvenli kabul edilir.

Karşılaştırma: Hesaplama Yöntemleri

Yöntem Avantajı Dezavantajı
Vanilla JS Hızlı, bağımlılık yok Karmaşık UI'da yönetimi zor
React/Vue Durum (state) yönetimi kolay Ekstra kütüphane boyutu

Güvenlik ve Hata Yönetimi

Kullanıcıdan alınan veriler her zaman doğrulanmalıdır. Negatif sayı girişi veya boş bırakılan alanlar hesaplama hatalarına yol açar. Ayrıca, XSS (Cross-Site Scripting) saldırılarına karşı kullanıcı girdilerini doğrudan DOM'a yazarken dikkatli olunmalıdır.

Uyarı: Kullanıcıdan alınan verileri hiçbir zaman sunucu tarafına doğrulamadan göndermeyin. İstemci tarafındaki (JavaScript) kontroller sadece kullanıcı deneyimi içindir; güvenlik için mutlaka sunucu tarafında (Node.js, PHP vb.) tekrar kontrol yapılmalıdır.

// Basit bir veri temizleme kontrolü
const sanitizeInput = (val) => {
  return val.replace(/]*>/g, '');
};

Sıkça Sorulan Sorular

JavaScript ile yapılan hesaplamalarda neden kayan nokta (floating point) hatası olur?

JavaScript, sayıları IEEE 754 standardında tutar. Çok hassas finansal hesaplamalarda 0.1 + 0.2 gibi işlemler beklenmedik sonuçlar verebilir. Bu yüzden finansal uygulamalarda sayıları kuruş cinsinden (tam sayı) tutmak veya kütüphane kullanmak önerilir.

Bu aracı mobil uyumlu nasıl yaparım?

CSS içerisinde @media (max-width: 600px) sorgularını kullanarak form elemanlarının genişliğini %100 yapabilir ve font boyutlarını optimize edebilirsiniz.

İnteraktif sonuçları nasıl PDF olarak kaydedebilirim?

Bunun için jsPDF gibi kütüphaneler kullanarak, oluşturduğunuz tabloyu doğrudan PDF dosyasına dönüştürebilirsiniz.

Kullanıcı girişi yaparken anlık hesaplama (real-time) nasıl yapılır?

Butona tıklanmasını beklemek yerine, input elementlerine input event listener'ı ekleyerek her tuş vuruşunda hesaplama fonksiyonunu tetikleyebilirsiniz.

Bu araç veritabanına veri kaydeder mi?

Bu rehberdeki örnek istemci taraflıdır. Verilerin kaydedilmesi için bir API endpoint'ine ihtiyaç duyarsınız.

Finansal Sorumluluk Reddi: Bu araç tamamen yazılım eğitimi amaçlıdır. Hesaplanan değerler piyasa koşullarına, banka politikalarına ve vergi oranlarına göre değişiklik gösterebilir. Bu araç herhangi bir finansal tavsiye, kredi teklifi veya yatırım danışmanlığı içermez. Gerçek finansal işlemleriniz için bankaların resmi hesaplama araçlarını kullanınız.

İleri Düzey Optimizasyon: Web Workers ile Hesaplama Performansı

Kredi hesaplama aracınızdaki veri seti büyüdüğünde veya karmaşık amortisman tabloları oluşturduğunuzda, ana iş parçacığı (main thread) üzerinde yapılan yoğun hesaplamalar tarayıcının arayüzünü dondurabilir. Bu durumu engellemek için hesaplama mantığını Web Workers kullanarak arka plana taşıyabilirsiniz.

Web Workers, JavaScript kodlarını ana sayfadan bağımsız, ayrı bir iş parçacığında çalıştırmanıza olanak tanır. Aşağıdaki örnekte, hesaplama işlemini ayrı bir dosyaya (worker.js) taşıyarak arayüzün akıcılığını nasıl koruyacağınızı görebilirsiniz.

Worker Dosyası (worker.js)

self.onmessage = function(e) {
    const { anapara, faiz, vade } = e.data;
    // Karmaşık hesaplama mantığı burada çalışır
    const aylikFaiz = faiz / 100 / 12;
    const taksit = (anapara * aylikFaiz) / (1 - Math.pow(1 + aylikFaiz, -vade));
    
    self.postMessage({ taksit: taksit.toFixed(2) });
};

Ana Dosyada Worker Kullanımı

const worker = new Worker('worker.js');

function hesapla() {
    const veri = { anapara: 100000, faiz: 1.5, vade: 12 };
    worker.postMessage(veri);
}

worker.onmessage = function(e) {
    console.log('Hesaplanan Taksit:', e.data.taksit);
    document.getElementById('sonuc').innerText = e.data.taksit;
};

Kredi Hesaplama Aracında Birim Test (Unit Testing) Süreçleri

Finansal uygulamalarda hata payı kabul edilemez. Hesaplama formüllerinizin doğruluğunu garanti altına almak için Jest gibi bir test kütüphanesi kullanarak birim testler yazmalısınız. Bu, kodunuzda yaptığınız güncellemelerin mevcut hesaplama mantığını bozmadığından emin olmanızı sağlar.

Aşağıdaki örnek, basit bir faiz hesaplama fonksiyonunun doğruluğunu test eden bir senaryodur:

// hesaplayici.js
export function taksitHesapla(anapara, faiz, vade) {
    const aylikFaiz = faiz / 100 / 12;
    return (anapara * aylikFaiz) / (1 - Math.pow(1 + aylikFaiz, -vade));
}

// hesaplayici.test.js
import { taksitHesapla } from './hesaplayici';

test('100.000 TL kredi için 12 ay vade ve %1 faiz doğrulaması', () => {
    const sonuc = taksitHesapla(100000, 1, 12);
    expect(Math.round(sonuc)).toBe(8885);
});

Test Stratejileri

  • Sınır Değer Analizi: Vade süresinin 1 ay veya 360 ay olduğu uç durumlarda sistemin nasıl tepki verdiğini test edin.
  • Geçersiz Girdi Testi: Kullanıcı negatif değerler veya metin girişi yaptığında fonksiyonun hata fırlatıp fırlatmadığını kontrol edin.
  • Hassasiyet Testi: Kayan nokta (floating point) hatalarının yuvarlama fonksiyonları ile düzeltilip düzeltilmediğini doğrulayın.

Sonuç

JavaScript ile dinamik bir kredi hesaplama aracı geliştirmek, temel programlama mantığını pratik uygulamalarla birleştirmenin en iyi yollarından biridir. Bu rehberde, form verilerini almayı, matematiksel formülleri uygulamayı ve sonuçları dinamik bir tablo ile göstermeyi öğrendiniz. Bir sonraki adım olarak, bu projeye "kredi ödeme planı" (amortisman tablosu) ekleyerek her ayın anapara ve faiz ödemelerini detaylandıran bir özellik geliştirebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Burak Yılmaz

Mutfak teknikleri ve pratik gastronomi ipuçları üzerine beş yıllık deneyime sahibim. Okuyucuların mutfak süreçlerini hızlandıracak ve kolaylaştıracak rehberler hazırlıyorum.

Yorumlar (17)

17
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Seda Erdem
Seda Erdem 18 Temmuz 2026

Yazıyı yeni bitirdim, çok başarılı. Emeklerine sağlık, uzun zamandır bu kadar sade ve öz anlatım görmemiştim.

Burak D.
Burak D. 20 Temmuz 2026

Input type number kullanırken min ve max değerlerini sınırlamayı unutmamak lazım, kullanıcı saçma sapan rakamlar girebiliyo bazen.

Burak Yılmaz
Burak Yılmaz 21 Temmuz 2026

Kesinlikle haklısın, validasyonları daha sıkı tutmak gerekiyor. Güzel bir dokunuş olur.

Deniz Yılmaz
Deniz Yılmaz 24 Temmuz 2026

Güzel bir rehber olmuş, bir sonraki yazıda buna amortisman tablosu eklemeyi de gösterebilirsin aslında, çok şık durur.

Oğuzhan K.
Oğuzhan K. 24 Temmuz 2026

Çok temiz ve anlaşılır olmuş. Özellikle DOM manipülasyonu kısmı yeni başlayanlar için harika bir örnek.

Burak Yılmaz
Burak Yılmaz 25 Temmuz 2026

Değerli yorumun için teşekkürler Oğuzhan, mantığı kavratabildiysem ne mutlu bana.

Fatma Şen
Fatma Şen 26 Temmuz 2026

Ya ben kodları kopyaladım ama çalışmadı acaba nerde hata yapıyo olabilirim? Konsolda hata da vermiyo.

Emre A.
Emre A. 27 Temmuz 2026

Script etiketini body'nin sonuna ekledin mi? Bazen head'e koyunca elementler yüklenmeden çalışmaya çalışıyo.

Hakan Demir
Hakan Demir 28 Temmuz 2026

Vanilla JS ile böyle şeyler yapmak çok öğretici, React'a boğulmadan temel mantığı anlamak lazım. Teşekkürler paylaşım için.

Selin Göktaş
Selin Göktaş 31 Temmuz 2026

Kardeş eline sağlık çok güzel olmuşta mobilde tasarım biraz kayıyo sanki, media query eklemek lazım sanırım.

Burak Yılmaz
Burak Yılmaz 01 Ağustos 2026

Haklısın Selin, CSS kısmını olabildiğince basit tutmaya çalıştım ama mobil için flex veya grid yapıları daha iyi olabilir. İnceleyeceğim.

Mert Öztürk
Mert Öztürk 01 Ağustos 2026

Ya bu kodlarda ufak bi hata var gibi, faiz hesaplarken virgülden sonra çok fazla basamak çıkıyo. toFixed(2) eklemek lazımdı bence.

Selim Kaya
Selim Kaya 02 Ağustos 2026

Evet haklısın Mert, ben de fark ettim onu, sonuca .toFixed(2) ekleyince düzeldi hemen.

Zeynep Arslan
Zeynep Arslan 03 Ağustos 2026

Harika anlatım olmuş. Kredi hesaplama kısmında faiz oranını kullanıcı kendisi girebilecek şekilde güncellemek istesek nasıl bir yol izlemeliyiz? input değerini mi dinlemem lazım?

Burak Yılmaz
Burak Yılmaz 04 Ağustos 2026

Kesinlikle Zeynep, 'input' event listener'ını kullanarak girdiyi anlık dinleyebilirsin. Value değiştiği anda fonksiyonu tetiklemen yeterli olacaktır.

Caner Yıldız
Caner Yıldız 05 Ağustos 2026

Eline sağlık Burak hocam, tam da böyle sade ve kütüphanesiz bir yapı arıyordum. Projemde kullandım, gayet stabil çalışıyor.

Burak Yılmaz
Burak Yılmaz 06 Ağustos 2026

Beğenmene çok sevindim Caner, temiz kod her zaman daha hızlı çalışır. Başarılar dilerim!

Yorum Yaz