Set/fi

From Lazarus wiki
Revision as of 11:21, 4 January 2018 by Djzepi (talk | contribs) (Created page with "{{Set}} =Joukko = == Johdanto == Joukko (Set) koodaa monia arvoja luetelluista tyypeistä (enumeration) järjestyksen (ordinal) omaaviin tyyppeihin. Tarkastellaan esimerki...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Deutsch (de) English (en) suomi (fi) français (fr) русский (ru)

Joukko

Johdanto

Joukko (Set) koodaa monia arvoja luetelluista tyypeistä (enumeration) järjestyksen (ordinal) omaaviin tyyppeihin.

Tarkastellaan esimerkiksi tätä lueteltua tyyppiä:

  TSpeed = (spVerySlow,spSlow,spAVerage,spFast,spVeryFast);

Ja tämä joukko:

  TPossibleSpeeds = set of TSpeed;

TPossibleSpeedsin kiinteät vakiojoukot määritellään niin että annetaan hakasulkujen sisällä joukkoon kuuluvat alkiot:

  const
    RatherSlow = [spVerySlow,spSlow];
    RatherFast = [spFast,spVeryFast];

RatherSlow ja RatherFast ovat joitakin TSpeed:n osajoukkoja.

Joukkojen käsittely

Kaksi funktiota on määritelty RTL:n System unit joita käytetään joukkojen käsittelemiseen Include(ASet,AValue) ja Exclude(ASet,AValue).

  var
    SomeSpeeds: TPossibleSpeeds;
  begin
    SomeSpeeds := [];
    Include(SomeSpeeds,spVerySlow);
    Include(SomeSpeeds,spVeryFast);
  end;

Joukkoja ei voida suoraan käsitellä, jos ne on julkaistu. Vaan on yleensä tehtävä paikallinen kopio, muutokset paikalliskopioon ja kutsutaan asettaja.

  procedure TSomething.DoSomething(Sender: TFarObject);
  var
    LocalCopy: TPossibleSpeeds;
  begin
    LocalCopy := Sender.PossibleSpeeds; // getter to local
    Include(LocalCopy,spVerySlow);
    Sender.PossibleSpeeds := LocalCopy; // local to setter.
  end;

Varattuasanaa In käytetään testaukseen, onko arvo joukossa. Sitä käytetään esimerkiksi tällä tavalla:

  var
    CanBeSlow: Boolean;
  const
    SomeSpeeds = [Low(TSpeed)..High(TSpeed)];
  begin
    CanBeSlow := (spVerySlow in SomeSpeeds) or (spSlow in SomeSpeeds);
  end;

Bittimaskit

Joukkoja voidaan käyttää luomaan bittimaskeja kuten on esitetty esimerkissä.

(*
  FLAG_A = 1;  // 1 shl 0
  FLAG_B = 2;  // 1 shl 1
  FLAG_C = 4;  // 1 shl 2 
*)

type
  TFlag = (FLAG_A, FLAG_B, FLAG_C);
  TFlags = set of TFlag;

var
  Flags: TFlags;

[..]
  Flags:= [FLAG_A, FLAG_C];
  if FLAG_A in Flags then ..  // check FLAG_A is set in flags variable


Navikointipalkki: datatyypit
Yksinkertaiset datatyypit

boolean byte cardinal char currency double dword extended int8 int16 int32 int64 integer longint real shortint single smallint pointer qword word

Monimutkaiset datatyypit

array class object record set string shortstring