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.
nameveage, 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 vevoidtipi 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 publictir. 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 vemakeSoundyöntemipublicolarak 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ğiprivateolarak tanımlanmıştır, bu nedenle sınıfın dışından erişilemez.- Veriyi kapsüllemek, özellikleri
privateanahtar 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ğiprotectedolarak 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,
BirdsınıfıAnimalsınıfından kalıtım alır ve böyleceAnimalsınıfınınmoveyöntemi kullanılabilir. Ayrıca, kendiflyyö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,
Shapesoyut bir sınıf olarak tanımlanır vegetArea, alt sınıflar tarafından uygulanması gereken soyut bir yöntemdir.Circlesınıfı bu soyut sınıftan türetilir ve bir dairenin alanını hesaplamak için kendigetAreayöntemini uygular. Ayrıca,describegibi 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,
Flyablearayüzüflyyöntemi için bir gereksinim tanımlar veAirplanesınıfı,flyyöntemi için somut bir tanım sağlayarak bu arayüzü uygular. Bu sayede,Flyabletüründe kabul edilen herhangi bir nesneninflyyö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
staticanahtar kelimesiyle tanımlarsınız. - Bu örnekte,
MathUtilssınıfıaddadlı statik bir yöntem vePIadlı 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.