Sytuacja kobiet w IT w 2024 roku
15.01.20212 min
Bulldogjob

Bulldogjob

Go otrzyma wreszcie typy generyczne

Niedawno na GitHubie pojawiła się propozycja rozpoczęcia prac nad wprowadzeniem typów generycznych do języka Go.

Go otrzyma wreszcie typy generyczne

Możliwe, że Google doda nareszcie typy generyczne do języka Go. Twórcy tej technologii przymierzali się do tego przez długie lata, a programiści często ich nawet o to prosili i to od momentu, w którym Go powstało - czyli od 2009 roku. Nic dziwnego, bo typy generyczne mogą w znacznym stopniu uprościć i usprawnić kodowanie. Nowość ta może zawitać w języku Google'a już przed końcem roku 2021 przy okazji wydania 1.18 beta. Implementacja byłaby wtedy kompletna, ale sama funkcja nie będzie jeszcze prawdopodobnie do końca zoptymalizowana. Więcej na temat zmian możemy przeczytać na GitHubie

Zaproponowano tam dodanie do Go parametrów typu ogólnego, co mogłoby się wiązać z wprowadzeniem do tego języka trochę programowania uogólnionego. Już wcześniej powstał z resztą szczegółowy projekt, który teraz może stać się rzeczywistością.

Typy generyczne

Ten rodzaj typów może umożliwić pisanie bardziej elastycznego kodu. W programowaniu uogólnionym mamy m.in. możliwość pisania funkcji i struktur danych bez wcześniejszego określania niektórych typów, bo można to bez problemu zrobić później.

Możemy zatem np. zdefiniować strukturę danych, która przechowuje dane dowolnego typu - typ ten zostaje określony, dopiero gdy tworzymy instancję naszej struktury danych.

Tak więc korzyści same rzucają się tutaj w oczy.

Ku typom generycznym

Tutaj wymienimy niektóre wysokopoziomowe zmiany, jakie zaproponowano we wcześniej wspomnianym poście na GitHubie. Oto jak to wygląda:

  • Funkcje mogą brać dodatkową listę z parametrem typu ogólnego. Używa ona nawiasów kwadratowych, ale poza tym wygląda, jak normalna lista parametrów:

func F[T any](p T) { ... }

  • Takie parametry typu ogólnego mogą być używane przez normalne parametry w ciele funkcji
  • Typy również mogą posiadać listę z parametrami typu ogólnego:

type MySlice[T any] []T

  • Każdy parametr typu ogólnego ma ograniczenie, podobnie jak w przypadku każdego normalnego parametru, który posiada typ:

func F[T Constraint](p T) { ... }

  • Ograniczenia dla typów ogólnych reprezentowane są jako interfejsy
  • Funkcje ogólne mogą korzystać jedynie z tych operacji, na które pozwalają ich ograniczenia parametrów typu ogólnego
  • Korzystanie z funkcji ogólnej lub typu generycznego będzie wymagało przekazania argumentów typu ogólnego.


Pełna lista proponowanych zmian znajduje się tutaj. Aby dowiedzieć się o nich jeszcze więcej, kliknijcie tutaj

Podsumowanie

Jak możemy przeczytać na blogu Go, zmiany te to na razie tylko propozycja. Twórcy zaznaczają jednak, że to, czy typy generyczne zostaną ostatecznie wprowadzone do języka, zależy od ocen oraz opinii społeczności - jeśli wszystko będzie szło dobrze, to prace będą kontynuowane, a jeśli nie, to propozycja zostanie odrzucona. 

<p>Loading...</p>