CodeBlanks Logo Icon CodeBlanks

Birleştirme

Tüm parçaları birleştirerek çalışan bir CLI uygulaması yazarsın.

Tüm parçaları birleştir

Son ders: tüm parçaları birleştirip çalışan bir uygulama elde ediyoruz. addTask, completeTask, saveTasks ve loadTasks fonksiyonları hazır. Şimdi bunları bir akışla bağlayacağız.

Akış şöyle: görev ekle, birini tamamla, kaydet, sonra diziyi sıfırla ve dosyadan yeniden yükle. Bu, kalıcılığın çalıştığını kanıtlar: kaydedilen veriyi yeniden yüklediğimizde aynı görevleri görmeliyiz. Son olarak filter ile tamamlanan görevleri sayarız. tasks.filter(function(t) { return t.done; }).length bize tamamlanan sayısını verir. Önceki dersin çözümünü alıp bu akışı ekleyeceğiz.

filter ile sayma

Akışın sonunda tamamlanan görevleri saymak için filter kullanırız. tasks.filter(function(t) { return t.done; }) yalnızca done özelliği true olan görevleri içeren yeni bir dizi döndürür. .length ile bu dizinin uzunluğunu alırız.

find ilk eşleşmeyi döndürürken filter tüm eşleşmeleri döndürür. Bu küçük fark büyük bir iş yapar: find tek bir öğe, filter bir altküme verir. doneCount değişkenine bu sayıyı atayıp console.log ile yazdıracağız. Böylece uygulamanın son özetini görmüş oluruz: toplam görev ve tamamlanan görev.

Uygulama Tüm parçaları birleştir

Önceki dersin çözümünü al. Şu akışı ekle: tasks = []; ile sıfırla. addTask("Toplantı") ve addTask("Rapor") ile iki görev ekle. completeTask(1) ile ilkini tamamla. saveTasks() ile kaydet. tasks = []; ile tekrar sıfırla. loadTasks() ile yeniden yükle. console.log("Toplam: " + tasks.length) yaz. let doneCount = tasks.filter(function(t) { return t.done; }).length; ile say. console.log("Tamamlanan: " + doneCount) yaz.

Başlangıç kodu

index.js
const path = require("path");
const fs = require("fs");
const DATA_FILE = path.join("data", "tasks.json");
function createTask(id, title) {
  return { id: id, title: title, done: false };
}
let tasks = [];
tasks.push(createTask(1, "Alışveriş"));
function addTask(title) {
  const id = tasks.length + 1;
  tasks.push(createTask(id, title));
}
function completeTask(id) {
  const task = tasks.find(function(t) { return t.id === id; });
  if (task) { task.done = true; }
}
function saveTasks() {
  fs.writeFileSync(DATA_FILE, JSON.stringify(tasks, null, 2));
}
function loadTasks() {
  try {
    const raw = fs.readFileSync(DATA_FILE, "utf8");
    tasks = JSON.parse(raw);
  } catch (e) {
    tasks = [];
  }
}
addTask("E-posta");
completeTask(1);
saveTasks();
console.log("Kaydedildi");

// Tüm parçaları birleştir: görev ekle, tamamla, kaydet, yeniden yükle
// buraya yaz

Örnek çözüm

index.js
const path = require("path");
const fs = require("fs");
const DATA_FILE = path.join("data", "tasks.json");
function createTask(id, title) {
  return { id: id, title: title, done: false };
}
let tasks = [];
tasks.push(createTask(1, "Alışveriş"));
function addTask(title) {
  const id = tasks.length + 1;
  tasks.push(createTask(id, title));
}
function completeTask(id) {
  const task = tasks.find(function(t) { return t.id === id; });
  if (task) { task.done = true; }
}
function saveTasks() {
  fs.writeFileSync(DATA_FILE, JSON.stringify(tasks, null, 2));
}
function loadTasks() {
  try {
    const raw = fs.readFileSync(DATA_FILE, "utf8");
    tasks = JSON.parse(raw);
  } catch (e) {
    tasks = [];
  }
}
addTask("E-posta");
completeTask(1);
saveTasks();
console.log("Kaydedildi");

tasks = [];
addTask("Toplantı");
addTask("Rapor");
completeTask(1);
saveTasks();
tasks = [];
loadTasks();
console.log("Toplam: " + tasks.length);
let doneCount = tasks.filter(function(t) { return t.done; }).length;
console.log("Tamamlanan: " + doneCount);

Beklenen çıktı

Kaydedildi
Toplam: 2
Tamamlanan: 1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Akış adımını sırasına eşle

Kavram Anlamı
1. addTask Görev ekler
2. completeTask Görevi tamamlar
3. saveTasks Dosyaya yazar
4. loadTasks Dosyadan okur

2 tasks.filter(function(t) { return t.done; }) ne döndürür?

index.js
tasks.filter(function(t) { return t.done; })
  • Tamamlanan görevlerden oluşan dizi Doğru cevap
  • Görev sayısını
  • Tek bir görev
  • İlk görevi

Açıklama: filter tüm eşleşmeleri içeren dizi verir.

3 loadTasks çağrısını tamamla

Soru
tasks = [];
____();
console.log("Toplam: " + tasks.length);
Cevap
tasks = [];
loadTasks();
console.log("Toplam: " + tasks.length);

Açıklama: Kaydedilen görevleri dosyadan yükler.

Başlangıç bölümündeki tüm dersler