Overview

Records Advanced

Records in DWScript support default values and anonymous syntax

Source Code

// Records in DWScript support default values and anonymous syntax
// that closely resembles JSON construction.

type
   TConfig = record
      // Default values
      ResolutionX : Integer := 1920;
      ResolutionY := 1080; // Inferred type
      Fullscreen := True;
      
      // Method in record
      function Description : String;
   end;

function TConfig.Description: String;
begin
  Result := Format(
    '%dx%d (Fullscreen: %s)',
    [ ResolutionX, ResolutionY, BoolToStr(Fullscreen) ]
  );
end;


PrintLn('<b>Default Values:</b>');
var cfg : TConfig;
PrintLn(cfg.Description);

// Override defaults
cfg.ResolutionX := 800;
cfg.ResolutionY := 600;
PrintLn(Format(
  'Modified: %dx%d',
  [ cfg.ResolutionX, cfg.ResolutionY ]
));

PrintLn('');
PrintLn('<b>Anonymous Records (JSON-like):</b>');

// Anonymous record creation
var player := record
   name := 'Hero';
   level := 42;
   "current-location" := 'Dungeon'; // Quoted identifier (for JSON)
   stats := record
      str := 18;
      dex := 14;
   end;
end;

PrintLn('Name: ' + player.name);
// Note: Quoted keys cannot be accessed via dot notation.
// They are primarily used for defining structures for export (e.g. JSON).

// Direct JSON serialization
PrintLn('');
PrintLn('<b>JSON Serialization:</b>');
PrintLn(JSON.Stringify(player));

Result

<b>Default Values:</b>
1920x1080 (Fullscreen: True)
Modified: 800x600

<b>Anonymous Records (JSON-like):</b>
Name: Hero

<b>JSON Serialization:</b>
{"current-location":"Dungeon","level":42,"name":"Hero","stats":{"dex":14,"str":18}}
On this page