Elements. Build native projects for any modern development platform, using the language(s) of your choice. Oxygene (Object Pascal), C#, Swift, Java, Go. | RemObjects Software

Loops

Language: Oxygene, Platform: Echoes, Category: Language
https://github.com/remobjects/ElementsSamples/tree/master/Oxygene/Echoes/Language/Loops

Program.pas

namespace Loops;

interface

uses System.Linq;

type
  ConsoleApp = class
  public
    class method Main;
    method loopsTesting;
    method fillData : sequence of Country;
  var
    Countries : sequence of Country;
  end;

type
  Country = public class
  public
    property Name : String;
    property Capital : String;

    constructor (setName : String; setCapital : String);
  end;
implementation

class method ConsoleApp.Main;
begin
  Console.WriteLine('Loops example');
  Console.WriteLine();

  with myConsoleApp := new ConsoleApp() do
     myConsoleApp.loopsTesting;
end;

method ConsoleApp.loopsTesting;
begin
  {---------------------------------}
  {"for" loop, taking every 5th item}
  for i : Int32 :=0 to 50 step 5 do
  begin
    Console.Write(i); Console.Write(' ');
  end;

  Console.WriteLine(); Console.WriteLine();

  {---------------------------------}
  {"for" loop, going from high to low value}
  for i : Int32 := 10 downto 1 do
  begin
    Console.Write(i); Console.Write(' ');
  end;

  Console.WriteLine(); Console.WriteLine();

  Countries := fillData;

  {---------------------------------}
  {loop with defined "index" variable, which will count from 0 through the number of elements looped}
  Console.WriteLine('Countries: ');
  for each c in Countries index num do
    Console.WriteLine(Convert.ToString(num + 1) + ') ' + c.Name);

  Console.WriteLine();

  Console.WriteLine('Cities: ');
  var ind : Integer :=0;

  {---------------------------------}
  {simple "loop" construct that loops endlessly, until broken out of}
  loop
  begin
    Console.WriteLine(Countries.ElementAt(ind).Capital);
    inc(ind);
    if ind = Countries.Count then break;
  end;

  Console.WriteLine();

  {---------------------------------}
  {the type of 'c' is inferred automatically}
  for each c in Countries do
    Console.WriteLine(c.Capital + ' is the capital of ' + c.Name);

  Console.WriteLine();

  ind := 0;
  Console.WriteLine('Cities: ');

  {"repeat ... until" loop}
  repeat
    Console.WriteLine(Countries.ElementAt(ind).Capital);
    inc(ind);
  until ind = Countries.Count;

  Console.WriteLine();

  ind := 0;
  Console.WriteLine('Countries: ');

  {---------------------------------}
  {"while ... do" loop}
  while ind < Countries.Count do
  begin
    Console.WriteLine(Countries.ElementAt(ind).Name);
    inc(ind);
  end;

  Console.ReadLine();
end;

method ConsoleApp.fillData: sequence of Country;
begin
  result := [new Country('UK', 'London'), new Country('USA', 'Washington'), new Country('Germany', 'Berlin'),
             new Country('Ukraine', 'Kyiv'), new Country('Russia', 'Moscow'), new Country('France', 'Paris')];

end;

constructor Country (setName :String; setCapital: String);
begin
  Name := setName;
  Capital := setCapital;
end;

end.