Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Fabricio Cabral
    @fabriciofx
    PPCF* ?
    Marcos Douglas B. Santos
    @mdbs99
    :D
    Claro que não pô
    Não tem sentido num ponteiro pra constante
    Também não tem ponteiro pra um Field, já que ele é (deveria) ser privado a classe.
    Essa programação utilizando ponteiros é bem baixo-nível. Também serve pra manipular estruturas de libs (C) e fazer coisas que exigem velocidade e baixo uso de memória (estou dizendo o que vc já sabe)
    Fabricio Cabral
    @fabriciofx
    Em C isso faria sentido
    Marcos Douglas B. Santos
    @mdbs99
    Fabricio Cabral
    @fabriciofx
    Ei, vou dar uma saída
    t+
    Marcos Douglas B. Santos
    @mdbs99
    Falow...
    Marcos Douglas B. Santos
    @mdbs99
    :+1:
    Marcos Douglas B. Santos
    @mdbs99
    Para quem ainda não viu, esse é o artigo dessa semana
    http://objectpascalprogramming.com/observando-objetos
    Fabricio Cabral
    @fabriciofx
    :thumbsup:
    Manoel Pedro Jr
    @Manoelgjr_twitter
    Boa tarde a todos
    This message was deleted
    @mdbs99 Marcos tive um probleminha com teu exemplo desse último artigo
    Não estou conseguindo compilar no lazarus está reclamando nesse trecho aqui
    type
      TPerson = class(TInterfacedObject, IObserver)
      private
        FName: string;
        FOnStatus: TStatusEvent; ///erro observer.classes.pas(14,16) Error: Identifier not found "TStatusEvent"
        procedure DoStatus(const Value: string);
    Marcos Douglas B. Santos
    @mdbs99
    @Manoelgjr_twitter
    Falha minha, ficou faltando acrescentar isso no código:
    type
      TStatusEvent = procedure (Sender: TObject; const Value: string) of object;
    Já atualizei o código do Gist
    Manoel Pedro Jr
    @Manoelgjr_twitter
    Imaginei mas pensei que era algum tipo do lazarus que faltava uma uses
    Valeu obrigado @mdbs99
    Marcos Douglas B. Santos
    @mdbs99
    Depois vou subir o exemplo completo
    Manoel Pedro Jr
    @Manoelgjr_twitter
    Ok
    Manoel Pedro Jr
    @Manoelgjr_twitter
    unit1.pas(42,28) Error: Incompatible types: got "SEMAPHORE1.ISemaphore" expected "OBSERVERINTERFACES.ISemaphore"
    @mdbs99 essa eu não entendi mesmo vou aguardar você subir os fontes para eu poder comparar e ver oque danado eu fiz de errado kkkkkkkkk
    Marcos Douglas B. Santos
    @mdbs99
    @Manoelgjr_twitter pelo erro parece que vc tem duas definições de ISemaphore, 1 na semaphore1 e outra na observerinterfaces
    Veja a cláusula uses, vc deve estar confundindo o compilador
    Manoel Pedro Jr
    @Manoelgjr_twitter
    @mdbs99 por incrivel que pareça era na uses mesmo mais na ordem tive que colocar na uses com essa ordem observer.classes, observerinterfaces, semaphore1 com a semaphore1 na frente dava aquele erro ^^
    Marcos Douglas B. Santos
    @mdbs99
    @Manoelgjr_twitter o compilador lê as units declaradas da direita para esquerda
    Fabricio Cabral
    @fabriciofx
    O uses funciona como operador (por causa da associatividade)?
    Marcos Douglas B. Santos
    @mdbs99
    O uses é o mesmo que o import do Java
    Mas se eu tiver um identificador (uma classe, record, constante, etc... não importa) com o mesmo nome em duas units diferentes, como o compilador irá saber qual utilizar?
    Bem, ele (compilador) faz a leitura de baixo pra cima, exemplo:
    uses
      Unit1, Unit2, Unit3;
    var
      F: TFoo;
    begin
      F := TFoo.Create;
    end;
    No código acima, se tivermos uma Classe TFoo declarada em cada uma das 3 Units, o compilador irá utilizar a primeira que encontrar, ou seja, a da Unit3. Ele lê de baixo pra cima, da direita para a esquerda, até encontrar um identificador.
    Marcos Douglas B. Santos
    @mdbs99
    No Java, no entanto, se houver 2 identificadores com o mesmo nome em 2 arquivos "importados", dá erro. O compilador não sabe qual identificador usar, obrigando o programador utilizar a declaração completa nome.da.unit.completa.mais.o.nome.da.classe
    Fabricio Cabral
    @fabriciofx
    Bem, ele (compilador) faz a leitura de baixo pra cima, exemplo:
    De baixo pra cima? O compilador começa lá do end; até o uses?
    Marcos Douglas B. Santos
    @mdbs99
    Não. Estou falando apenas sobre encontrar identificadores
    Unit1, Unit2, Unit3; <<< ele começa a procurar daqui
    até aqui >>> Unit1, Unit2, Unit3;
    E em cada Unit que ele entra, ele faz o mesmo, é claro
    Fabricio Cabral
    @fabriciofx
    Interessante. Tem comportamento de associatividade de operadores. É como se o uses fosse um operador.
    Veja por exemplo a seguinte sintaxe:
    var
      x , y, z: Integer;
    begin
      x := y := z := 2;
    (desculpe se tiver algum erro, mas meu Pascal-fu está uns 20 anos enferrujado :D)
    O operador de atribuição tem associatividade da direita para a esquerda (é um dos poucos assim)
    Por isso que essa sintaxe é válida e funciona: o 2 é adicionado ao z, depois o valor de z é adicionado ao y e depois o valor de y é adicionado a x
    Isso obviamente, assumindo que dá pra fazer esse tipo de operação em Pascal, pois não lembro se é possível. É possível?
    Marcos Douglas B. Santos
    @mdbs99
    Não é possível. Apenas 1 por vez.
    Fabricio Cabral
    @fabriciofx
    Vixe.
    Marcos Douglas B. Santos
    @mdbs99
    var
      x , y, z: Integer;
    begin
      z := 2;
      y := z;
      x := y;