Introducció

En aquest tema, explorarem els generics i les col·leccions en Delphi/Object Pascal. Els generics permeten crear classes, procediments i funcions que poden operar amb qualsevol tipus de dades, proporcionant una major flexibilitat i reutilització del codi. Les col·leccions són estructures de dades que permeten emmagatzemar i gestionar grups d'objectes de manera eficient.

Conceptes Clau

Generics

  • Definició: Els generics són plantilles que permeten definir classes, procediments i funcions que poden treballar amb qualsevol tipus de dades.
  • Avantatges:
    • Reutilització del codi.
    • Tipus de dades segurs en temps de compilació.
    • Millora de la llegibilitat i mantenibilitat del codi.

Col·leccions

  • Definició: Les col·leccions són estructures de dades que permeten emmagatzemar, gestionar i manipular grups d'objectes.
  • Tipus de Col·leccions:
    • TList: Una llista genèrica.
    • TDictionary: Un diccionari genèric que emmagatzema parelles clau-valor.
    • TQueue: Una cua genèrica.
    • TStack: Una pila genèrica.

Exemples Pràctics

Exemple de Generics

program GenericsExample;

{$APPTYPE CONSOLE}

uses
  System.Generics.Collections;

type
  TBox<T> = class
  private
    FValue: T;
  public
    constructor Create(AValue: T);
    function GetValue: T;
  end;

constructor TBox<T>.Create(AValue: T);
begin
  FValue := AValue;
end;

function TBox<T>.GetValue: T;
begin
  Result := FValue;
end;

var
  IntBox: TBox<Integer>;
  StrBox: TBox<string>;

begin
  IntBox := TBox<Integer>.Create(123);
  StrBox := TBox<string>.Create('Hello, Generics!');

  Writeln('IntBox Value: ', IntBox.GetValue);
  Writeln('StrBox Value: ', StrBox.GetValue);

  Readln;
end.

Explicació:

  • TBox: Una classe genèrica que pot emmagatzemar qualsevol tipus de dades.
  • Create: Constructor que inicialitza el valor.
  • GetValue: Mètode que retorna el valor emmagatzemat.

Exemple de Col·leccions

program CollectionsExample;

{$APPTYPE CONSOLE}

uses
  System.Generics.Collections;

var
  List: TList<Integer>;
  Dict: TDictionary<string, Integer>;
  I: Integer;

begin
  // Exemple de TList
  List := TList<Integer>.Create;
  try
    List.Add(10);
    List.Add(20);
    List.Add(30);

    for I in List do
      Writeln('List Item: ', I);
  finally
    List.Free;
  end;

  // Exemple de TDictionary
  Dict := TDictionary<string, Integer>.Create;
  try
    Dict.Add('One', 1);
    Dict.Add('Two', 2);
    Dict.Add('Three', 3);

    for var Key in Dict.Keys do
      Writeln('Dict Item: ', Key, ' = ', Dict[Key]);
  finally
    Dict.Free;
  end;

  Readln;
end.

Explicació:

  • TList: Una llista genèrica que emmagatzema enters.
  • TDictionary<string, Integer>: Un diccionari genèric que emmagatzema parelles clau-valor (cadena-enter).

Exercicis Pràctics

Exercici 1: Crear una Classe Genèrica

Descripció: Crea una classe genèrica TContainer<T> que emmagatzemi un valor de qualsevol tipus i implementi mètodes per establir i obtenir aquest valor.

Solució:

type
  TContainer<T> = class
  private
    FValue: T;
  public
    procedure SetValue(AValue: T);
    function GetValue: T;
  end;

procedure TContainer<T>.SetValue(AValue: T);
begin
  FValue := AValue;
end;

function TContainer<T>.GetValue: T;
begin
  Result := FValue;
end;

Exercici 2: Utilitzar Col·leccions Genèriques

Descripció: Crea una llista genèrica TList<string> i afegeix-hi tres cadenes. Després, mostra les cadenes a la consola.

Solució:

var
  StringList: TList<string>;
  Str: string;

begin
  StringList := TList<string>.Create;
  try
    StringList.Add('Delphi');
    StringList.Add('Object Pascal');
    StringList.Add('Generics');

    for Str in StringList do
      Writeln('StringList Item: ', Str);
  finally
    StringList.Free;
  end;

  Readln;
end.

Errors Comuns i Consells

  • Error: No especificar el tipus de dades en una col·lecció genèrica.

    • Solució: Assegura't de definir el tipus de dades entre els símbols < i >.
  • Error: Intentar afegir un tipus de dades incorrecte a una col·lecció genèrica.

    • Solució: Verifica que el tipus de dades que estàs afegint coincideixi amb el tipus de la col·lecció.

Conclusió

En aquest tema, hem après sobre els generics i les col·leccions en Delphi/Object Pascal. Els generics ens permeten crear codi més flexible i reutilitzable, mentre que les col·leccions ens ajuden a gestionar grups d'objectes de manera eficient. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. En el proper tema, explorarem la programació multifil i paral·lela en Delphi.

Curs de Programació Delphi/Object Pascal

Mòdul 1: Introducció a Delphi/Object Pascal

Mòdul 2: Estructures de Control i Procediments

Mòdul 3: Treballant amb Dades

Mòdul 4: Programació Orientada a Objectes

Mòdul 5: Funcions Avançades de Delphi

Mòdul 6: Desenvolupament d'Interfícies Gràfiques amb VCL i FMX

Mòdul 7: Desenvolupament Web i Mòbil

Mòdul 8: Millors Pràctiques i Patrons de Disseny

Mòdul 9: Projecte Final

© Copyright 2024. Tots els drets reservats