Modül 4 - Standart Kütüphane
Modül 4: Standart Kütüphane
Section titled “Modül 4: Standart Kütüphane”Bu modülde AssemblyScript’in standart kütüphanesini detaylı şekilde inceleyeceğiz.
Bölüm 4.1: Array - Dinamik Diziler
Section titled “Bölüm 4.1: Array - Dinamik Diziler”Array Oluşturma
Section titled “Array Oluşturma”// Boş dizi oluşturmalet bos: Array<i32> = new Array<i32>();let sayilar: i32[] = new Array<i32>();
// Başlangıç boyutu ilelet boyutlu: Int32Array = new Int32Array(10);
// Başlangıç değerleri ilelet degerler: i32[] = [1, 2, 3, 4, 5];Array Metodları
Section titled “Array Metodları”// Ekleme ve çıkarmafunction diziIslemleri(): void { let dizi: i32[] = [];
// Sonuna ekle dizi.push(10); dizi.push(20); dizi.push(30); // [10, 20, 30]
// Sondan çıkar let son: i32 = dizi.pop(); // son = 30, dizi = [10, 20]
// Başına ekle dizi.unshift(5); // [5, 10, 20]
// Baştan çıkar let ilk: i32 = dizi.shift(); // ilk = 5, dizi = [10, 20]
// Uzunluk console.log(dizi.length.toString()); // "2"}
// Dilimleme ve kopyalamafunction dilimIslemleri(): void { let dizi: i32[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// slice(start, end) - alt dizi al let dilim1: i32[] = dizi.slice(2, 5); // [3, 4, 5] let dilim2: i32[] = dizi.slice(0, 3); // [1, 2, 3] let dilim3: i32[] = dizi.slice(5); // [6, 7, 8, 9, 10] let kopya: i32[] = dizi.slice(); // Tümünü kopyala
// concat - dizileri birleştir let dizi2: i32[] = [20, 30]; let birlesik: i32[] = dizi.concat(dizi2); // [1..10, 20, 30]}
// Arama işlemlerifunction aramaIslemleri(): void { let dizi: string[] = ["elma", "armut", "çilek", "erik"];
// indexOf - elemanın indeksini bul let indeks: i32 = dizi.indexOf("çilek"); // 2 let yok: i32 = dizi.indexOf("muz"); // -1
// includes - var mı kontrolü let varMi: bool = dizi.includes("erik"); // true}
// Sıralama işlemlerifunction siralamaIslemleri(): void { let sayilar: i32[] = [5, 2, 8, 1, 9, 3];
// sort() - varsayılan sıralama sayilar.sort(); // [1, 2, 3, 5, 8, 9]
// reverse() - ters çevir sayilar.reverse(); // [9, 8, 5, 3, 2, 1]
// String dizisi sıralama let meyveler: string[] = ["çilek", "armut", "elma", "erik"]; meyveler.sort(); // Alfabetik (Unicode sırasına göre)}
// Dönüştürme işlemlerifunction donusturmeIslemleri(): void { let sayilar: i32[] = [1, 2, 3, 4, 5];
// map - her elemanı dönüştür let kareler: i32[] = sayilar.map(x => x * x); // [1, 4, 9, 16, 25]
// filter - koşula göre ele let ciftler: i32[] = sayilar.filter(x => x % 2 === 0); // [2, 4]
// reduce - tek değere indirge let toplam: i32 = sayilar.reduce((acc, x) => acc + x, 0); // 15
// forEach - her eleman için işlem let toplam2: i32 = 0; sayilar.forEach(x => toplam2 += x); // toplam2 = 15}Pratik Örnekler
Section titled “Pratik Örnekler”// İstatistiksel işlemlerexport function diziIstatistik(dizi: Int32Array): Float64Array { if (dizi.length === 0) { return new Float64Array([0, 0, 0]); }
let n: f64 = f64(dizi.length); let toplam: f64 = 0; let karelerToplami: f64 = 0;
for (let i: i32 = 0; i < dizi.length; i++) { let deger: f64 = f64(dizi[i]); toplam += deger; karelerToplami += deger * deger; }
let ortalama: f64 = toplam / n; let varyans: f64 = (karelerToplami / n) - (ortalama * ortalama); let sapma: f64 = Math.sqrt(varyans);
return new Float64Array([ortalama, varyans, sapma]);}
// Dizi benzersiz elemanlarıexport function diziBenzersiz(dizi: Int32Array): Int32Array { let seen: Set<i32> = new Set(); let sonuc: i32[] = [];
for (let i: i32 = 0; i < dizi.length; i++) { let eleman: i32 = dizi[i]; if (!seen.has(eleman)) { seen.add(eleman); sonuc.push(eleman); } }
return sonuc as Int32Array;}
// Dizi frekans hesabıexport function diziFrekans(dizi: Int32Array): Map<i32, i32> { let frekans: Map<i32, i32> = new Map();
for (let i: i32 = 0; i < dizi.length; i++) { let eleman: i32 = dizi[i]; let sayac: i32 = frekans.has(eleman) ? frekans.get(eleman) : 0; frekans.set(eleman, sayac + 1); }
return frekans;}Bölüm 4.2: String - Metin İşlemleri
Section titled “Bölüm 4.2: String - Metin İşlemleri”String Oluşturma
Section titled “String Oluşturma”// String literallet mesaj: string = "Merhaba Dünya!";
// Template literal (sınırlı destek)let ad: string = "Ahmet";let selam: string = `Merhaba ${ad}`; // "Merhaba Ahmet"
// String concatenationlet birlesim: string = "Merhaba " + "Dünya"; // "Merhaba Dünya"String Metodları
Section titled “String Metodları”// Karakter erişimifunction karakterErisim(): void { let s: string = "Merhaba";
// charCodeAt() - karakter kodunu al let kod: i32 = s.charCodeAt(0); // 77 ('M')
// charAt() - karakteri al (string döner) let karakter: string = s.charAt(0); // "M"
// length - uzunluk let uzunluk: i32 = s.length; // 7}
// Alt string işlemlerifunction altStringIslemleri(): void { let s: string = "Merhaba Dünya";
// substring - alt string al let alt1: string = s.substring(0, 7); // "Merhaba" let alt2: string = s.substring(8); // "Dünya"
// indexOf - arama let poz: i32 = s.indexOf("Dünya"); // 8 let yok: i32 = s.indexOf("Ayşe"); // -1
// includes - içerir mi? let varMi: bool = s.includes("hab"); // true}
// String karşılaştırmafunction stringKarsilastirma(): void { let s1: string = "elma"; let s2: string = "armut"; let s3: string = "elma";
// equals (==) let esit1: bool = s1 == s3; // true let esit2: bool = s1 == s2; // false
// compareTo (benzer) let kiyas1: i32 = s1 < s2 ? -1 : s1 > s2 ? 1 : 0; // -1 (elma < armut)}
// String dönüştürmefunction stringDonusturme(): void { let s: string = "Merhaba";
// toUpperCase - büyük harfe çevir let buyuk: string = s.toUpperCase(); // "MERHABA"
// toLowerCase - küçük harfe çevir let kucuk: string = s.toLowerCase(); // "merhaba"
// trim - baş/son boşlukları at let bosluklu: string = " selam "; let trim: string = bosluklu.trim(); // "selam"}Pratik String Fonksiyonları
Section titled “Pratik String Fonksiyonları”// Palindrom kontrolüexport function palindromMi(s: string): bool { let temiz: string = s.toLowerCase().trim(); let uzunluk: i32 = temiz.length;
for (let i: i32 = 0; i < uzunluk / 2; i++) { if (temiz.charCodeAt(i) !== temiz.charCodeAt(uzunluk - 1 - i)) { return false; } } return true;}
// Kelime sayısıexport function kelimeSayisi(s: string): i32 { let temiz: string = s.trim(); if (temiz.length === 0) return 0;
let sayac: i32 = 0; let kelimeIci: bool = false;
for (let i: i32 = 0; i < temiz.length; i++) { let kod: i32 = temiz.charCodeAt(i);
if (kod === 32) { // Boşluk kelimeIci = false; } else if (!kelimeIci) { kelimeIci = true; sayac++; } }
return sayac;}
// String'i kelime dizisine ayırmaexport function kelimelereAyir(s: string): string[] { let kelimeler: string[] = []; let kelime: string = ""; let kelimeIci: bool = false;
for (let i: i32 = 0; i < s.length; i++) { let kod: i32 = s.charCodeAt(i);
if (kod === 32) { // Boşluk if (kelimeIci) { kelimeler.push(kelime); kelime = ""; kelimeIci = false; } } else { kelime += String.fromCharCode(kod); kelimeIci = true; } }
if (kelimeIci) { kelimeler.push(kelime); }
return kelimeler;}
// String ters çevirexport function stringTersCevir(s: string): string { let ters: string = "";
for (let i: i32 = s.length - 1; i >= 0; i--) { ters += String.fromCharCode(s.charCodeAt(i)); }
return ters;}Bölüm 4.3: Map<K,V> ve Set
Section titled “Bölüm 4.3: Map<K,V> ve Set”Map - Anahtar-Değer Çiftleri
Section titled “Map - Anahtar-Değer Çiftleri”// Map oluşturmalet harita: Map<string, i32> = new Map();
// Değer eklemeharita.set("elma", 10);harita.set("armut", 15);harita.set("çilek", 20);
// Değer okumalet elmaFiyat: i32 = harita.get("elma"); // 10let meyveFiyat: i32 = harita.get("muz"); // 0 (veya hata)
// Varsa kontrol etif (harita.has("armut")) { let fiyat: i32 = harita.get("armut"); // 15}
// Boyutconsole.log(harita.size.toString()); // "3"
// Silmeharita.delete("çilek");console.log(harita.size.toString()); // "2"
// Tümünü silharita.clear();console.log(harita.size.toString()); // "0"Set - Benzersiz Değerler
Section titled “Set - Benzersiz Değerler”// Set oluşturmalet kume: Set<i32> = new Set();
// Değer eklemekume.add(10);kume.add(20);kume.add(30);kume.add(10); // Tekrarlanan değer eklenmez
// Boyutconsole.log(kume.size.toString()); // "3"
// Var mı kontrolület varMi: bool = kume.has(20); // truelet yokMu: bool = kume.has(40); // false
// Silmekume.delete(20);
// Diziye çevirme// let dizi: i32[] = kume.values(); // [10, 30]Pratik Örnekler
Section titled “Pratik Örnekler”// Kelime frekans sayacıexport function kelimeFrekansi(metin: string): Map<string, i32> { let frekans: Map<string, i32> = new Map(); let kelimeler: string[] = kelimelereAyir(metin);
for (let i: i32 = 0; i < kelimeler.length; i++) { let kelime: string = kelimeler[i].toLowerCase(); let sayac: i32 = frekans.has(kelime) ? frekans.get(kelime) : 0; frekans.set(kelime, sayac + 1); }
return frekans;}
// İki dizinin kesişimiexport function diziKesisim(dizi1: Int32Array, dizi2: Int32Array): Int32Array { let kume: Set<i32> = new Set(); let sonuc: i32[] = [];
// İlk diziyi set'e ekle for (let i: i32 = 0; i < dizi1.length; i++) { kume.add(dizi1[i]); }
// İkinci dizidekilerden set'te olanları al for (let i: i32 = 0; i < dizi2.length; i++) { let eleman: i32 = dizi2[i]; if (kume.has(eleman)) { sonuc.push(eleman); kume.delete(eleman); // Tekrarı önle } }
return sonuc as Int32Array;}
// İki dizinin birleşimiexport function diziBirlesim(dizi1: Int32Array, dizi2: Int32Array): Int32Array { let kume: Set<i32> = new Set();
for (let i: i32 = 0; i < dizi1.length; i++) { kume.add(dizi1[i]); }
for (let i: i32 = 0; i < dizi2.length; i++) { kume.add(dizi2[i]); }
// Set'i diziye çevir let sonuc: i32[] = []; // Not: AssemblyScript'te Set.values() sınırlıdır // Manual döngü gerekebilir return sonuc as Int32Array;}Bölüm 4.4: Math ve Mathf
Section titled “Bölüm 4.4: Math ve Mathf”Math - Double Precision (f64)
Section titled “Math - Double Precision (f64)”// Temel matematiklet mutlak: f64 = Math.abs(-5.5); // 5.5let us: f64 = Math.pow(2, 10); // 1024let kok: f64 = Math.sqrt(25); // 5let yuvarla: f64 = Math.round(3.7); // 4let tavan: f64 = Math.ceil(3.2); // 4let taban: f64 = Math.floor(3.9); // 3
// Trigonometriklet sin: f64 = Math.sin(0); // 0let cos: f64 = Math.cos(0); // 1let tan: f64 = Math.tan(0); // 0let asin: f64 = Math.asin(0); // 0let acos: f64 = Math.acos(1); // 0let atan: f64 = Math.atan(0); // 0let atan2: f64 = Math.atan2(1, 1); // 0.785 (π/4)
// Hiperboliklet sinh: f64 = Math.sinh(0); // 0let cosh: f64 = Math.cosh(0); // 1let tanh: f64 = Math.tanh(0); // 0
// Logaritmiklet ln: f64 = Math.log(Math.E); // 1 (doğal logaritma)let log10: f64 = Math.log10(100); // 2let log2: f64 = Math.log2(8); // 3let exp: f64 = Math.exp(1); // 2.718...
// Min/Maxlet min: f64 = Math.min(5, 10); // 5let max: f64 = Math.max(5, 10); // 10
// Sabitlerconst PI: f64 = Math.PI; // 3.14159...const E: f64 = Math.E; // 2.71828...Mathf - Single Precision (f32)
Section titled “Mathf - Single Precision (f32)”// Aynı metodlar f32 içinlet sinf: f32 = Mathf.sin(0); // 0let cosf: f32 = Mathf.cos(0); // 1let kokf: f32 = Mathf.sqrt(25); // 5
// Performans kritik kodlarda f32 tercih edilirPratik Matematik Fonksiyonları
Section titled “Pratik Matematik Fonksiyonları”// Dereceyi radyana çevirexport function dereceToRadyan(derece: f64): f64 { return derece * Math.PI / 180;}
// Radyanı dereceye çevirexport function radyanToDerece(radyan: f64): f64 { return radyan * 180 / Math.PI;}
// Logaritma taban değiştirmeexport function logTaban(x: f64, taban: f64): f64 { return Math.log(x) / Math.log(taban);}
// Üstlü n! hesaplamaexport function faktoriyelGamma(x: f64): f64 { // Gamma fonksiyonu kullanarak (x-1)! // Basit yaklaşım if (x <= 1) return 1;
let sonuc: f64 = 1; for (let i: f64 = 2; i < x; i += 1) { sonuc *= i; } return sonuc;}
// Kombinasyon hesaplamaexport function kombinasyon(n: i32, r: i32): f64 { if (r < 0 || r > n) return 0; if (r === 0 || r === n) return 1;
// C(n, r) = n! / (r! * (n-r)!) // Daha verimli yöntem: let sonuc: f64 = 1; for (let i: i32 = 0; i < r; i++) { sonuc *= f64(n - i) / f64(i + 1); } return sonuc;}
// Permütasyon hesaplamaexport class permutasyon(n: i32, r: i32): f64 { if (r < 0 || r > n) return 0;
let sonuc: f64 = 1; for (let i: i32 = 0; i < r; i++) { sonuc *= f64(n - i); } return sonuc;}Bölüm 4.5: TypedArray Türleri
Section titled “Bölüm 4.5: TypedArray Türleri”Türler ve Kullanım
Section titled “Türler ve Kullanım”// Her typed array türü
// Int8Array - 8-bit signedlet i8: Int8Array = new Int8Array(10);i8[0] = 127; // Maksimum// i8[1] = 128; // ❌ Taşar!
// Uint8Array - 8-bit unsignedlet u8: Uint8Array = new Uint8Array(10);u8[0] = 255; // Maksimum
// Int16Array - 16-bit signedlet i16: Int16Array = new Int16Array(10);i16[0] = 32767; // Maksimum
// Uint16Array - 16-bit unsignedlet u16: Uint16Array = new Uint16Array(10);u16[0] = 65535; // Maksimum
// Int32Array - 32-bit signed (en yaygın)let i32: Int32Array = new Int32Array(10);i32[0] = 2147483647; // Maksimum
// Uint32Array - 32-bit unsignedlet u32: Uint32Array = new Uint32Array(10);u32[0] = 4294967295; // Maksimum
// Float32Array - 32-bit floatlet f32: Float32Array = new Float32Array(10);f32[0] = 3.14;
// Float64Array - 64-bit floatlet f64: Float64Array = new Float64Array(10);f64[0] = 3.141592653589793;ArrayBuffer ve DataView
Section titled “ArrayBuffer ve DataView”// Raw buffer oluşturmalet buffer: ArrayBuffer = new ArrayBuffer(1024); // 1 KB
// DataView - esnek okuma/yazmalet view: DataView = new DataView(buffer);
// Farklı türlerle yazmaview.setInt8(0, 127);view.setInt16(2, 1000, true); // Little endianview.setInt32(4, 100000, true);view.setFloat64(8, 3.14, true);
// Okumalet i8: i32 = view.getInt8(0);let i16: i32 = view.getInt16(2, true);let i32: i32 = view.getInt32(4, true);let f64: f64 = view.getFloat64(8, true);
// BigInt ile 64-bitlet i64: i64 = view.getInt64(12, true);let u64: u64 = view.getUint64(20, true);Bölüm 4.6: console ve process
Section titled “Bölüm 4.6: console ve process”Console Çıktısı
Section titled “Console Çıktısı”// String çıktısıconsole.log("Merhaba Dünya!");
// Sayı çıktısıconsole.log((42).toString());
// Birden fazla değer// console.log("Değer:", x.toString()); // Sınırlı destek
// Hata çıktısıconsole.error("Bir hata oluştu!");
// Uyarı çıktısı// console.warn("Uyarı!"); // Sınırlı destekProcess Bilgileri
Section titled “Process Bilgileri”// Komut satırı argümanlarılet args: string[] = process.argv;
// Argüman sayısılet argCount: i32 = args.length;
// Çalışma dizini// let cwd: string = process.cwd(); // Sınırlı destek
// Platform bilgisi// let platform: string = process.platform; // Sınırlı destekBölüm 4.7: Tarih ve Zaman (Date)
Section titled “Bölüm 4.7: Tarih ve Zaman (Date)”Date Kullanımı
Section titled “Date Kullanımı”// Mevcut zamanlet simdi: Date = new Date();
// Timestamp (milisaniye)let timestamp: f64 = simdi.getTime();
// Yılı allet yil: i32 = simdi.getFullYear(); // UTC
// Ayı al (0-11)let ay: i32 = simdi.getMonth();
// Günü allet gun: i32 = simdi.getDate();
// Saati allet saat: i32 = simdi.getHours();
// Dakikayı allet dakika: i32 = simdi.getMinutes();
// Saniyeyi allet saniye: i32 = simdi.getSeconds();Tarih Hesaplamaları
Section titled “Tarih Hesaplamaları”// İki tarih arasındaki fark (gün)export fn tarihFarkiGun(tarih1: Date, tarih2: Date): f64 { let ms1: f64 = tarih1.getTime(); let ms2: f64 = tarih2.getTime(); let farkMs: f64 = Math.abs(ms1 - ms2); return farkMs / (1000 * 60 * 60 * 24);}
// Tarihe gün ekleexport fn tariheGunEkle(tarih: Date, gun: i32): Date { let ms: f64 = tarih.getTime(); let yeniMs: f64 = ms + (f64(gun) * 24 * 60 * 60 * 1000); let yeni: Date = new Date(); yeni.setTime(yeniMs); return yeni;}
// Haftanın günüexport fn haftaninGunu(tarih: Date): string { let gun: i32 = tarih.getDay();
const GUNLER: string[] = [ "Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi" ];
return GUNLER[gun];}Bölüm 4.8: Modül 4 Özeti
Section titled “Bölüm 4.8: Modül 4 Özeti”Öğrendiklerimiz
Section titled “Öğrendiklerimiz”| Konu | Öğrenilenler |
|---|---|
| Array | push, pop, slice, map, filter, reduce |
| String | concat, substring, indexOf, includes |
| Map/Set | Anahtar-değer, benzersiz değerler |
| Math | Trigonometrik, logaritmik, min/max |
| TypedArray | Int8Array, Int32Array, Float64Array |
| Date | Zaman işlemleri, tarih hesaplamaları |
| Console | Çıktı yazma |
| Process | Argümanlar |
Önemli İpuçları
Section titled “Önemli İpuçları”-
Array
yerine Int32Array kullanın let dizi: Int32Array = new Int32Array(10); // ✅ -
String birleştirme için + operatörü
let s: string = "Merhaba " + "Dünya"; // ✅ -
Map’te has() kontrolü unutmayın
if (harita.has("anahtar")) {let deger = harita.get("anahtar");}
Alıştırmalar
Section titled “Alıştırmalar”- Dizi medyanı hesaplayan fonksiyon yazın
- String içindeki ünlü harfleri sayan fonksiyon yazın
- Map kullanarak kelime sözlüğü oluşturun
- İki tarihin aynı gün olup olmadığını kontrol edin
- TypedArray ile resim grayscale dönüşümü yapın
Sonraki Modül
Section titled “Sonraki Modül”Modül 5: WebAssembly Entegrasyonu
Hazır mısınız? 🚀