Sobes.tech
Junior

Generics кадом имкониятҳоро пешниҳод мекунад?

sobes.tech AI

Ҷавоб аз AI

Генериклар (умумий турлар) қуйидаги имкониятларни таклиф қилади:

  • Турлар хавфсизлигини ошириш (Type Safety): Улар тур хатоларини ишга туширишдан олдин, тузилма босқичида аниқлай олади.
  • Турлар ўтказиш (Type Casting)ни йўқ қилиш: Коллекциялар ва бошқа маълумот тузилмалари билан ишлашда аниқ тур ўтказишларига эҳтиёж қолмайди.
  • Коднинг қайта ишлатилиши (Reusability): Умумий синфлар, интерфейслар ва методларни яратишга имкон беради, улар турли турдаги маълумотлар билан ишлай олади, логикани такрорламасдан.
  • Ишлаш тезлигини ошириш: Javaда генериклар турлар ўчирилиши (Type Erasure) орқали амалга оширилади, бу ҳар доим Object ва ўтказишлар билан солиштирганда тўғридан-тўғри ишлашни яхшилашга олиб келмайди, аммо баъзи тилларда (масалан, C#) улар boxing/unboxingдан қочиш орқали яхшироқ ишлашни таъминлайди.
  • Коднинг ўқилиши ва сақланиши осонлашади: Улар код билан ишлайдиган маълумот турларини аниқ кўрсатади, бу уни тушунишни осонлаштиради.

Javaда қўлланиш мисоли:

// Генерикларсиз
/*
List list = new ArrayList();
list.add("сатр");
Integer i = (Integer) list.get(0); // Ишга туширишда хато (ClassCastException)
*/

// Генериклар билан
List<String> stringList = new ArrayList<>();
stringList.add("сатр");
// Integer i = stringList.get(0); // Компиляция хато

C#да мисол:

// Генерикларсиз
/*
ArrayList list = new ArrayList();
list.Add("сатр");
int i = (int)list[0]; // Ишга туширишда хато (InvalidCastException)
*/

// Генериклар билан
List<string> stringList = new List<string>();
stringList.Add("сатр");
// int i = stringList[0]; // Компиляция хато