Gépirat privát osztály tulajdonságai

A gépírás támogatja az osztályok magán tulajdonságait

Hozzáférés-vezérlés a gépírás osztályokban

Számos programozási nyelv alapértelmezés szerint privátként határozza meg osztályainak tulajdonságait. Ahhoz, hogy a példányon kívülről is elérhetővé váljanak, általában a „public” kulcsszóval kell megjelölnie a releváns tulajdonságokat.

Ugyanez a kulcsszó elérhető a gépírási osztályokban is, de nincs sok hatása, mivel a gépírási osztályok tulajdonságai alapértelmezés szerint nyilvánosak. Ezt a korlátozást a Javascript örökölte, amely nem támogatja az osztályok magántulajdonait. Nos, egészen a közelmúltig.

Privát mezők a Javascriptben?

Igen és nem. Jelenleg a Javascript-osztályokban a magántulajdonságokat meghatározó specifikációra vonatkozó munka tervezete a 3. szakaszban van, ami azt jelzi, hogy a végleges meghatározás elfogadható, de még nem biztos.

A specifikációban javasolt változtatások valóban egyszerűek, és csak kissé módosítják a szintaxist. Ha egy tulajdonságot privátként szeretne megjelölni, egyszerűen előtagozza azt egy hashtaggel. Ez az!

class User {
  // A prop marked as private.
  #id;
  age;
  
  constructor(age){
    this.age = age;
    // Valid assignment, as we're 
    // within the class.
    this.#id = Math.floor(Math.random() * 1000);
  }
}

// ... Later in the code ...

const user = new User(42);
// Error! Won't work as it's private.
user.#id = 123;

Saját mezők a gépírásban!

Ugyanez a szintaxis vonatkozik a Typescript magántulajdonaira is. A 3.8 verzió óta ezt a funkciót használhatja a példányok tulajdonságaihoz és funkcióihoz való hozzáférés, valamint a statikus mezők jobb ellenőrzéséhez. A szintaxis ugyanaz, mint a Javascript példában.

Egy pillanat, kérem, privát statikus mezők?

Igen, jól olvastad: a statikus változók és a függvények is lehetnek privátok, ami azt jelenti, hogy csak az osztály tagjain belül hívhatók meg. Ezt a funkciót a Typescript 4.3-as verziójával adták hozzá, a motorháztető alatt végzett további változtatásokkal együtt. A 4.3-as verzió dokumentációja szerint a privát osztály tagjai futás közben már valóban privátok, ami azt jelzi, hogy ez a szolgáltatás teljesen lejárt.

Felhívjuk figyelmét, hogy a Typescript a "privát" két különböző változatát támogatja az órákon. Az általánosan ismert a "private" kulcsszóval van ellátva, amely a megjelölt mezőket még a származtatott osztályoktól is hozzáférhetetlenül tartja.

A másik jellemző, amelyet itt bemutatok és új, az úgynevezett "magánnevek" használata. Ugyanaz a szintaxis, mint a Javascript esetében, mivel specifikációjukat JS eredetileg meghatározta. A gépírásban futás közben ellenőrzik a hozzáférést.

/**
 * A class that uses already known
 * private props.
 */
class CommonUser {
  // Common 'private' prop in TS.
  private id: number;
  age: number;
  
  constructor(age: number){
    this.age = age;
    this.id = Math.floor(Math.random() * 1000);
  }
}

/**
 * Using the new sytanx for private class names.
 */
class SpecialUser {
  #id: number;
  age: number;
  
  constructor(age: number){
    this.age = age;
    // Valid, we're inside the class.
    this.#id = SpecialUser.#generateId();
  }
  
  static #generateId(){
    return Math.floor(Math.random() * 1000);
  }
  
  #stringifyId(){
    return this.#id.toString();
  }
}

// ... Later in the code ...

// Invalid, call is outside of class 'SpecialUser'.
SpecialUser.#generateId();

const user = new SpecialUser(42);
// And that won't work as well.
user.#stringifyId();

Utolsó szavak az utolsó fejezethez

Ez a cikk nem túl hosszú, de rávilágít a Typescript által kínált nagyszerű szolgáltatásra, valamint magának a Typescriptnek egy általánosabb előnyére. A Javascript esetében a magántulajdonok még mindig vázlatok (bár nagyon késői szakaszban vannak), de a Typescript esetében már megvalósításra és szállításra kerül sor, ami megmutatja ennek a nyelvnek a fejlődési sebességét!

Javaslatok

Kapcsolódó

Kiegészítés

Nyelvek