Executando verificação de segurança...
1

Full stack - use a linguagem que quiser, mas que tal Pascal?

Introdução

Pascal está aí há um bom tempo (1970). É fato que o próprio Niklaus Wirth aperfeiçoou a linguagem (Modula, Oberon, etc.). Mas o Pascal original também sofreu melhorias e mantendo grande parte da compatibilidade com a versão inicial. Se o programa não inclui detalhes como acesso ao hardware ou alguma biblioteca inexistente, é bem provável que você compile um programa da década de 90 sem maiores dificuldades.

A linguagem já se demonstrou capaz em diversas oportunidades. Provavelmente a mais conhecida seja o sistema operacional do Lisa, primeiro computador da Apple com interface gráfica. O Photoshop, pelo menos até a versão 1.0.1, era em Pascal também. Troquei o C pelo Pascal quando descobri que era possível compilar um programa mais complexo em menos tempo do que compilar um Hello World em C.

Servidor

Para a parte do servidor, é possível utilizar toda a estrutura das versões atuais (Delphi/Lazarus) como acessar os maiores SGBDs com grande facilidade. Se é possível fazer um SO como o do Lisa, não existe muita coisa que você não possa fazer.

Cliente

Utilizando o Pas2JS o código em Pascal (limitando as restrições impostas pelo JS como acesso direto à memória e outras coisas) é possível emir código JS que pode ser utilizado por uma página web, nodeJS (servidor), Electron, Atom, VSCode e onde mais for aceito.

Exemplo

Página HTML

Tendo a seguinte página:

<!doctype html>
<html lang="en">
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  <title>Animation</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
  <script src="animation.js"></script>
</head>
<body>
  <div class="w3-container w3-margin w3-center ">
    <div class="w3-bar">
      <button id="id_animate1" class="w3-button w3-black">Top</button>
      <button id="id_animate2" class="w3-button w3-teal">Bottom</button>
      <button id="id_animate3" class="w3-button w3-red">Left</button>
      <button id="id_animate4" class="w3-button w3-yellow">Right</button>
      <button id="id_animate5" class="w3-button w3-orange">Fade</button>
      <button id="id_animate6" class="w3-button w3-brown">Zoom</button>
      <button id="id_animate7" class="w3-button w3-blue">Spin</button>
      <button id="id_animate8" class="w3-button w3-blue-gray">Normal</button>
    </div>
    <p>W3.CSS Animation Classes.</p>
    <div id="id_anim">
      <h1 id="id_text" >Animation is Fun!</h1>
    </div>
  </div>
  <script>
    window.addEventListener("load", rtl.run);
  </script>
</body>
</html>

Tirando o CSS, as únicas inclusões foram:

  • inclusão animation.js que será escrito em Pascal

  • inicialização do script com rtl.run

Programa em Pascal

Bah, que vergonha. Ou eu não sei salientar a sintaxe de Pascal ou o TabNew ignora linguagens que não possuem chaves. :P

program animation;

{$mode objfpc}

uses
  BrowserApp, JS, Classes, SysUtils, Web;

type
  TMyApplication = class(TBrowserApplication)
    btAnimation:array[1..8] of TJSHTMLButtonElement;
    clAnim,
    lbText:TJSHTMLElement;
    procedure BindElements;
    function DoAnimation(aEvent: TJSMouseEvent):boolean;
  protected
    procedure DoRun; override;
  public
  end;

procedure TMyApplication.BindElements;
var
  i:integer;
  s:string;
begin
  clAnim:=TJSHTMLElement(document.getElementById('id_anim'));
  lbText:=TJSHTMLElement(document.getElementById('id_text'));
  for i:=1 to 8 do begin
    s:='id_animate'+i.ToString;
    btAnimation[i]:=TJSHTMLButtonElement(getHTMLElement(s));
    btAnimation[i].OnClick := @DoAnimation;
  end;
end;

function TMyApplication.DoAnimation(aEvent: TJSMouseEvent):boolean;;
var
  s:string;
  i:integer;
  cAnim : Array [1..8] of string = ('w3-animate-top','w3-animate-bottom',
          'w3-animate-left','w3-animate-right','w3-animate-opacity',
          'w3-animate-zoom','w3-spin','');
begin
  s:=aEvent.currentTargetElement.Attrs['id'];
  i:=RightStr(s,1).ToInteger;
  if cAnim[i]='' then
    lbText.innerHTML:='Pas2JS'
  else
    lbText.innerHTML:= cAnim[i];
  clAnim.className:=cAnim[i];
end;

procedure TMyApplication.DoRun;
begin
  BindElements;
  Terminate;
end;

var
  Application : TMyApplication;

begin
  Application := TMyApplication.Create(nil);
  Application.Initialize;
  Application.Run;
end.
  • O método DoRun será chamado na inicialização

  • O método BindElements será usado para mapear os elementos necessários e definicos com o respctivo id na página HTML. Mapeou o texto que será alterado, a DIv que contém a animação e os diversos botões

  • O método DoAnimation é o responsável pelo processamento após o respectivo botão ser pressionado. O nome dos métodos como ineerHTML possuem uma correlação para facilitar a vida de quem já conhece.

No mais, achei o código legível. Quem adora chaves vai detestar.

Resultado

pas2js-anim.gif

Carregando publicação patrocinada...
1