Comprendre le type Delphi SET

Un de Langage Delphi des fonctionnalités que l'on ne retrouve pas dans d'autres langages modernes est la notion d'ensembles.

Delphidéfinir le type est une collection de valeurs du même type ordinal.

Un ensemble est défini à l'aide du ensemble de mot-clé:

Les types d'ensemble sont généralement définis avec des sous-plages.

Dans l'exemple ci-dessus, le TMagicNumber est un type de sous-gamme personnalisé permettant aux variables du type TMagicNumber de recevoir des valeurs de 1 à 34. Autrement dit, un type de sous-gamme représente un sous-ensemble des valeurs dans un autre type ordinal.

Les valeurs possibles du type d'ensemble sont tous les sous-ensembles du type de base, y compris l'ensemble vide.

Une limitation sur les ensembles est qu'ils peuvent contenir jusqu'à 255 éléments.

Dans l'exemple ci-dessus, le type d'ensemble TMagicSet est un ensemble d'éléments TMagicNumber - nombres entiers compris entre 1 et 34.

La déclaration TMagicSet = ensemble de TMagicNumber est égal à la déclaration suivante: TMagicSet = ensemble de 1 à 34.

instagram viewer

Définir les variables de type

Dans l'exemple ci-dessus, les variables emptyMagicSet, oneMagicSet et anotherMagicSet sont des ensembles de TMagicNumber.

À attribuer une valeur à une variable de type ensemble, utilisez les crochets et répertoriez tous les éléments de l'ensemble. Un péché:

Remarque 1: chaque variable de type d'ensemble peut contenir l'ensemble vide, noté [].

Remarque 2: l'ordre des éléments dans un ensemble n'a pas de sens, et il n'est pas significatif qu'un élément (valeur) soit inclus deux fois dans un ensemble.

Le mot clé IN

Pour tester si un élément est inclus dans l'ensemble (variable) utilisez le DANS mot-clé:

Définir les opérateurs

De la même manière que vous pouvez additionner deux nombres, vous pouvez avoir un ensemble qui est la somme de deux ensembles. Avec les sets, votre événement a plus d'opérateurs:

  • + renvoie l'union de deux ensembles.
  • - renvoie la différence de deux ensembles.
  • * renvoie l'intersection de deux ensembles.
  • = retourne vrai si deux ensembles sont égaux - ont le même élément.
  • <= renvoie vrai si le premier ensemble est un sous-ensemble du second ensemble.
  • > = retourne vrai si le premier ensemble est un surensemble du deuxième ensemble.
  • <> renvoie vrai si deux ensembles ne sont pas identiques.
  • IN renvoie vrai si un élément est inclus dans l'ensemble.

Voici un exemple:

La procédure ShowMessage sera-t-elle exécutée? Si oui, qu'est-ce qui sera affiché?

Voici l'implémentation de la fonction DisplayElements:

Indice: oui. Affiché: "18 | 24 |".

Entiers, caractères, booléens

Bien sûr, lors de la création de types d'ensemble, vous n'êtes pas limité aux valeurs entières. Les types ordinaux Delphi incluent des caractères et des valeurs booléennes.

Pour empêcher les utilisateurs de taper des clés alpha, ajoutez cette ligne dans le OnKeyPress d'un contrôle d'édition:

Ensembles avec énumérations

Un scénario couramment utilisé dans le code Delphi consiste à mélanger les types énumérés et les types définis.

Voici un exemple:

Question: le message sera-t-il affiché? Réponse: non :(

Ensembles dans les propriétés de contrôle Delphi

Lorsque vous devez appliquer "gras" à la police utilisée dans les contrôles TEdit, vous utilisez l'inspecteur d'objets ou le code suivant:

La propriété Style de la police est une propriété de type ensemble! Voici comment il est défini:

Ainsi, un type énuméré TFontStyle est utilisé comme type de base pour le type d'ensemble TFontStyles. La propriété Style de la classe TFont est de type TFontStyles - donc une propriété de type set.

Un autre exemple inclut le résultat de la fonction MessageDlg. Une fonction MessageDlg est utilisée pour afficher une boîte de message et obtenir la réponse de l'utilisateur. L'un des paramètres de la fonction est le paramètre Buttons de type TMsgDlgButtons.

TMsgDlgButtons est défini comme un ensemble de (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp).

Si vous affichez un message à l'utilisateur contenant les boutons Oui, OK et Annuler et que vous souhaitez exécuter du code si vous avez cliqué sur les boutons Oui ou OK, vous pouvez utiliser le code suivant:

Dernier mot: les sets sont super. Les ensembles peuvent sembler déroutants pour un Delphi débutant, mais dès que vous commencez à utiliser des variables de type ensemble, vous découvrirez qu'elles fournissent bien plus que cela ne semblait au début.