TypeScript'te Sınıflar
Bu makale TypeScript'teki sınıfları açıklar.
YouTube Video
TypeScript'te Sınıflar
TypeScript'teki sınıflar, JavaScript'in ES6 sınıflarına dayanır ve tür açıklamaları ve erişim belirteçleri gibi ek özellikler sunar. Bu, nesneye yönelik programlama kavramlarını kullanmanıza olanak tanırken daha sağlam ve net tür güvenliği sağlar.
Aşağıda TypeScript'teki sınıfların temel kullanım ve özelliklerinin açıklamaları bulunmaktadır.
Temel Sınıf Tanımı
1class Person {
2 name: string; // Member variable
3 age: number; // Member variable
4
5 // Constructor
6 constructor(name: string, age: number) {
7 this.name = name;
8 this.age = age;
9 }
10
11 // Method
12 greet(): void {
13 console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
14 }
15}
16
17const person = new Person("Alice", 25);
18person.greet(); // Hello, my name is Alice and I am 25 years old.
name
veage
, sınıfın özellikleridir (üye değişkenlerdir).constructor
, bir sınıf örneği oluştururken çağrılan ve argümanları alıp özelliklere değer atayan bir yöntemdir.greet
, sınıfın bir yöntemidir vevoid
tipi olarak herhangi bir dönüş değeri olmadığını gösterir.
Erişim Belirteçleri
TypeScript'te, sınıf özelliklerine ve yöntemlerine erişimi kontrol etmek için erişim belirteçlerini (public
, private
, protected
) kullanabilirsiniz.
public
Varsayılan olarak, tüm özellikler ve yöntemler public
tir. Bu, sınıfın dışından erişilebileceği anlamına gelir.
1class Animal {
2 public species: string;
3
4 constructor(species: string) {
5 this.species = species;
6 }
7
8 public makeSound(): void {
9 console.log(`${this.species} makes a sound.`);
10 }
11}
12
13const animal = new Animal("Dog");
14console.log(animal.species); // Dog
15animal.makeSound(); // Dog makes a sound.
species
özelliği vemakeSound
yöntemipublic
olarak tanımlanmıştır ve sınıfın dışından erişilebilir.
private
private
belirtecini kullanmak, özelliklere veya yöntemlere sınıfın dışından erişimi engeller.
1class Car {
2 private brand: string;
3
4 constructor(brand: string) {
5 this.brand = brand;
6 }
7
8 public getBrand(): string {
9 return this.brand;
10 }
11}
12
13const car = new Car("Toyota");
14// console.log(car.brand); // Error: 'brand' is private and cannot be accessed.
15console.log(car.getBrand()); // Toyota
brand
özelliğiprivate
olarak tanımlanmıştır, bu nedenle sınıfın dışından erişilemez.- Veriyi kapsüllemek, özellikleri
private
anahtar kelimesiyle gizleyerek sağlanabilir.
protected
protected
belirteci, sınıfın dışından erişimi kısıtlar ancak alt sınıflarda (türetilmiş sınıflarda) erişime izin verir.
1class Vehicle {
2 protected model: string;
3
4 constructor(model: string) {
5 this.model = model;
6 }
7}
8
9class Truck extends Vehicle {
10 public getModel(): string {
11 return this.model;
12 }
13}
14
15const truck = new Truck("Ford F-150");
16console.log(truck.getModel()); // Ford F-150
17
18// console.log(truck.model);
19// Error: Property 'model' is protected and only accessible within class 'Vehicle' and its subclasses.
model
özelliğiprotected
olarak tanımlanmıştır, bu nedenle sınıfın dışından erişilemez, ancak alt sınıflardan erişilebilir.
Getters ve Setters
TypeScript'te, get
ve set
anahtar kelimelerini kullanarak özellik değerlerini almak ve ayarlamak için getter ve setter tanımlayabilirsiniz.
1class Employee {
2 private _salary: number;
3
4 constructor(salary: number) {
5 this._salary = salary;
6 }
7
8 // Getter
9 get salary(): number {
10 return this._salary;
11 }
12
13 // Setter
14 set salary(newSalary: number) {
15 if (newSalary > 0) {
16 this._salary = newSalary;
17 } else {
18 console.log("Salary must be positive.");
19 }
20 }
21}
22
23const employee = new Employee(50000);
24console.log(employee.salary); // 50000
25employee.salary = 60000;
26console.log(employee.salary); // 60000
27employee.salary = -100; // Salary must be positive.
- Bu örnekte,
salary
özelliğine dışarıdan erişimi ve güncellemeleri kontrol etmek için getter ve setter kullanılır. Setter, negatif değerleri önlemek için doğrulama yapar ve geçersiz bir değer girildiğinde uyarı mesajı gösterir.
Kalıtım
TypeScript'te sınıflar devralınabilir. extends
anahtar kelimesini kullanarak bir üst sınıftan işlevsellik devralabilirsiniz.
1class Animal {
2 constructor(public name: string) {}
3
4 public move(): void {
5 console.log(`${this.name} is moving.`);
6 }
7}
8
9class Bird extends Animal {
10 public fly(): void {
11 console.log(`${this.name} is flying.`);
12 }
13}
14
15const bird = new Bird("Sparrow");
16bird.move(); // Sparrow is moving.
17bird.fly(); // Sparrow is flying.
- Bu örnekte,
Bird
sınıfıAnimal
sınıfından kalıtım alır ve böyleceAnimal
sınıfınınmove
yöntemi kullanılabilir. Ayrıca, kendifly
yöntemini tanımlar ve üst sınıftan özellikler devralırken yeni işlevsellik ekler.
Soyut Sınıflar
Soyut sınıflar (abstract
), doğrudan örneklenemez ve alt sınıflarda somut uygulamalar sağlamak için şablon olarak kullanılır.
1abstract class Shape {
2 abstract getArea(): number;
3
4 public describe(): void {
5 console.log("This is a shape.");
6 }
7}
8
9class Circle extends Shape {
10 constructor(private radius: number) {
11 super();
12 }
13
14 public getArea(): number {
15 return Math.PI * this.radius * this.radius;
16 }
17}
18
19const circle = new Circle(5);
20console.log(circle.getArea()); // 78.53981633974483
21circle.describe(); // This is a shape.
- Bu örnekte,
Shape
soyut bir sınıf olarak tanımlanır vegetArea
, alt sınıflar tarafından uygulanması gereken soyut bir yöntemdir.Circle
sınıfı bu soyut sınıftan türetilir ve bir dairenin alanını hesaplamak için kendigetArea
yöntemini uygular. Ayrıca,describe
gibi somut yöntemler ortak işlevler olarak kalıtılır ve olduğu gibi kullanılabilir.
Arayüzlerle İlişki
Sınıflar, belirli özelliklere ve yöntemlere sahip olmalarını sağlamak için arayüzleri uygulayabilir.
1interface Flyable {
2 fly(): void;
3}
4
5class Airplane implements Flyable {
6 public fly(): void {
7 console.log("The airplane is flying.");
8 }
9}
10
11const airplane: Flyable = new Airplane();
12airplane.fly(); // The airplane is flying.
- Bu örnekte,
Flyable
arayüzüfly
yöntemi için bir gereksinim tanımlar veAirplane
sınıfı,fly
yöntemi için somut bir tanım sağlayarak bu arayüzü uygular. Bu sayede,Flyable
türünde kabul edilen herhangi bir nesneninfly
yöntemi olacağı garanti edilir.
Statik Üyeler
Bir sınıfta statik üyeler tanımladığınızda, bu yöntemler ve özellikler doğrudan sınıfın kendisiyle ilişkilendirilir. Statik üyelere, sınıfın bir örneğini oluşturmadan erişilebilir.
1class MathUtils {
2 static PI: number = 3.14;
3
4 static add(a: number, b: number): number {
5 return a + b;
6 }
7}
8
9console.log(MathUtils.add(10, 20)); // 30
10console.log(MathUtils.PI); // 3.14
- Statik yöntemleri
static
anahtar kelimesiyle tanımlarsınız. - Bu örnekte,
MathUtils
sınıfıadd
adlı statik bir yöntem vePI
adlı statik bir özellik tanımlar. - Statik üyeler, sınıf örneklerine ait değildir; doğrudan sınıf üzerinden çağrılabilir.
Özet
TypeScript sınıfları, JavaScript sınıf işlevselliğine tür güvenliği, erişim belirleyicileri ve soyut sınıflar gibi özellikler ekler. Bu, daha güçlü ve daha güvenli nesne yönelimli programlamaya olanak tanır.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.