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
    :)
    Marcos Douglas B. Santos
    @mdbs99
    Mas o que parece ser uma gambiarra por causa da falta de case-sensitive, virou um padrão que deixa o código melhor de ler
    O "F" é como o this. Só que escreve menos e é mais elegante.
    O "I" nem preciso dizer que a Microsoft também usa no C# (copia do Pascal).
    O "T"... Tipo... bem eu acho legal (talvez pq já estou acostumado).
    Tem gente que usa "C" pra constantes assim CFooConst. Se eu tiver que usar uma constante, ainda prefiro o formato C: FOO_CONST
    Fabricio Cabral
    @fabriciofx
    Blza
    Marcos Douglas B. Santos
    @mdbs99
    O "P" é de Ponteiro
    type
      TMyRec = record
        a: string;
      end;
    
      PMyRec = ^TMyRec;
    Fabricio Cabral
    @fabriciofx
    E se for ponteiro de ponteiro? PP* ?
    Marcos Douglas B. Santos
    @mdbs99
    Tem gente que usa assim mesmo
    Fabricio Cabral
    @fabriciofx
    Se for ponteiro de ponteiro de uma constante que foi declarada como um field?
    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?