Middle
Šta su generici (Generics) u programiranju?
sobes.tech АИ
Одговор од АИ
Обобщења (Generics) су механизам у језицима програмирања који омогућава креирање компоненти (класа, интерфејса, метода/функција) које раде са различитим типовима података, а да при том не губе типску безбедност и без потребе за кастовањем (casting).
Главни циљеви коришћења Generics:
- Повећање типске безбедности: Компилатор проверава типове у току компилације, откривајући грешке пре извршавања програма.
- Побољшање читљивости кода: Јасно је са којим типовима података рад компонента.
- Поновна употреба кода: Може се креирати једна компонента која ради са различитим типовима, уместо да се пишу више верзија.
- Смањење кастовања: Избегава потребу за јасним кастовањем, што чини код чистијим и мање подложним грешкама
ClassCastException(у језицима где је то применљиво, нпр. Java).
Примери коришћења Generics:
- Колекције: Листе (
List), скупови (Set), мапе (Map) могу чувати елементе одређеног типа, што гарантује да у колекцију неће ући елементи другог типа. - Методе/функције: Метод може радити са параметрима или враћати вредност опште врсте.
- Класе/интерфејси: Могу се креирати опште структуре података или шаблони понашања.
Пример у Јави:
// Општа класа пар
public class Pair<T, U> {
private T first;
private U second;
public Pair(T first, U second) {
this.first = first;
this.second = second;
}
public T getFirst() {
return first;
}
public U getSecond() {
return second;
}
}
// Коришћење
Pair<String, Integer> pair = new Pair<>("Hello", 123);
String str = pair.getFirst(); // Нема потребе за кастовањем
int num = pair.getSecond(); // Нема потребе за кастовањем
// Неправилна паровања
Pair<String, Integer> wrongPair = new Pair<>(123, "Hello"); // Грешка компајлера: несагласност типова
Пример у C#:
// Општа класа Pair
public class Pair<T, U>
{
public T First { get; set; }
public U Second { get; set; }
public Pair(T first, U second)
{
First = first;
Second = second;
}
}
// Коришћење
var pair = new Pair<string, int>("Hello", 123);
string str = pair.First; // Нема потребе за кастовањем
int num = pair.Second; // Нема потребе за кастовањем
// Неправилна паровања
var wrongPair = new Pair<string, int>(123, "Hello"); // Грешка компајлера
Пример у TypeScript:
// Генеричка функција за добијање првог елемента низа
function getFirstElement<T>(arr: T[]): T | undefined {
if (arr.length > 0) {
return arr[0];
}
return undefined;
}
// Коришћење
let numbers: number[] = [1, 2, 3];
let firstNumber = getFirstElement(numbers); // firstNumber има тип number
let words: string[] = ["a", "b", "c"];
let firstWord = getFirstElement(words); // firstWord има тип string
// let mixedArray: (number | string)[] = [1, "a", 2];
// let firstMixed = getFirstElement(mixedArray); // firstMixed има тип number | string
Дакле, Generics представљају моћан алат за креирање флексибилног, типобезбедног и поновно коришћеног кода.