Alternativa para o overload
Pessoal
tenho a seguinte situação na minha lib
TDateGen = class
public
class function ExtrairAno(aDate:TDateTime):integer;
class function ExtrairMes(aDate:TDateTime):integer;
class function ExtrairDia(aDate:TDateTime):integer;
end;
Fiz isso usando o DecodeDate, mas separei em funções assim para não ter que ficar criando toda vez as variaveis e tudo mais.
Bom vamos ao meu problema.
Gostaria de criar tbm as seguintes funções
class function ExtrairAno(aDate:TDateTime):string;
class function ExtrairMes(aDate:TDateTime):string;
class function ExtrairDia(aDate:TDateTime):string;
Pois tenho caso em que preciso escrever o retorno, e para não ter que ficar fazendo o IntToStr toda hora no código.
como usaria isso.
var
mes :integer;
begin
mes := ExtrairMes(now); //(aqui ele chamaria a função com o result integer, se a variavel fosse string, ele chamaria a função com result string;
Tem como fazer isso?
Quais são as alternativas?
Obrigado
tenho a seguinte situação na minha lib
TDateGen = class
public
class function ExtrairAno(aDate:TDateTime):integer;
class function ExtrairMes(aDate:TDateTime):integer;
class function ExtrairDia(aDate:TDateTime):integer;
end;
Fiz isso usando o DecodeDate, mas separei em funções assim para não ter que ficar criando toda vez as variaveis e tudo mais.
Bom vamos ao meu problema.
Gostaria de criar tbm as seguintes funções
class function ExtrairAno(aDate:TDateTime):string;
class function ExtrairMes(aDate:TDateTime):string;
class function ExtrairDia(aDate:TDateTime):string;
Pois tenho caso em que preciso escrever o retorno, e para não ter que ficar fazendo o IntToStr toda hora no código.
como usaria isso.
var
mes :integer;
begin
mes := ExtrairMes(now); //(aqui ele chamaria a função com o result integer, se a variavel fosse string, ele chamaria a função com result string;
Tem como fazer isso?
Quais são as alternativas?
Obrigado
Marcos Iwazaki
Curtidas 0
Respostas
Anderson Farias
04/11/2009
|Fiz isso usando o DecodeDate, mas separei em funções assim para
|não ter que ficar criando toda vez as variaveis e tudo mais.
Pq? As funções DayOf(), MonthOf() e YearOf() não já fazem isso? Pq não usá-las?
|Bom vamos ao meu problema.
|Gostaria de criar tbm as seguintes funções
| class function ExtrairAno(aDate:TDateTime):string;
|...
Uma solução simples? Mude o nome das funções! tipo: ExtrairAnoToS(), etc
T+
|não ter que ficar criando toda vez as variaveis e tudo mais.
Pq? As funções DayOf(), MonthOf() e YearOf() não já fazem isso? Pq não usá-las?
|Bom vamos ao meu problema.
|Gostaria de criar tbm as seguintes funções
| class function ExtrairAno(aDate:TDateTime):string;
|...
Uma solução simples? Mude o nome das funções! tipo: ExtrairAnoToS(), etc
T+
GOSTEI 0
Marcos Iwazaki
04/11/2009
| Pq? As funções DayOf(), MonthOf() e YearOf() não já fazem isso? Pq não usá-las?
Não lembrava dessas funções, bom como estão todos separados em funções vou alterar la. Obrigado.
|Uma solução simples? Mude o nome das funções! tipo: ExtrairAnoToS(), etc
Então o que eu quero mesmo era poder usar o mesmo nome, Usar algum tipo de desing Pattern (não sei se existe para este problema).
Mas vou anotar sua sugestão... Mesmo que não consiga fazer exatamente o que eu quero é bom ter sugestões de como chegar no mesmo resultado.
Obrigado.
Não lembrava dessas funções, bom como estão todos separados em funções vou alterar la. Obrigado.
|Uma solução simples? Mude o nome das funções! tipo: ExtrairAnoToS(), etc
Então o que eu quero mesmo era poder usar o mesmo nome, Usar algum tipo de desing Pattern (não sei se existe para este problema).
Mas vou anotar sua sugestão... Mesmo que não consiga fazer exatamente o que eu quero é bom ter sugestões de como chegar no mesmo resultado.
Obrigado.
GOSTEI 0
Anderson Farias
04/11/2009
A única forma de usar o mesmo nome, q eu saiba, é se vc usar procedimentos no lugar de funções. Assim a assinatura passa a ser diferente, o q é um requisito para o overload. Ex:
class procedure ExtrairAno(Data: TDateTime; var Ano: Integer); overload;
class procedure ExtrairAno(Data: TDateTime; var Ano: string); overload;
e dai usar da forma:
var
i: Integer;
s: string;
begin
MinhaClasse.ExtrairAno(Date, i);
MinhaClasse.ExtrairAno(Date, s);
end;
T+
class procedure ExtrairAno(Data: TDateTime; var Ano: Integer); overload;
class procedure ExtrairAno(Data: TDateTime; var Ano: string); overload;
e dai usar da forma:
var
i: Integer;
s: string;
begin
MinhaClasse.ExtrairAno(Date, i);
MinhaClasse.ExtrairAno(Date, s);
end;
T+
GOSTEI 0
Marcos Iwazaki
04/11/2009
Blz amigo.
Acho que procedimentos para mim vai ficar pior. Vou criar outras functions mesmo.
Obrigado.
Acho que procedimentos para mim vai ficar pior. Vou criar outras functions mesmo.
Obrigado.
GOSTEI 0
Marcos Iwazaki
04/11/2009
Fiz o ultimo post pelo chrome e não apareceu a janela de finalizar o topico.
Estou tentando novamente pelo firefox p ver se aparece.
Estou tentando novamente pelo firefox p ver se aparece.
GOSTEI 0
Jorge Abreu
04/11/2009
Boa tarde a todos.
Bom, como deixei de programar em delphi há mais de dois anos, para programar em java, porém quando programava em Delphi 2007, voce podia também fazer não só o Overload (Sobrecarga) como também o Override (Sobrescrita) de functions.
Não sei se isto vai funcionar nas versões atuais do Delphi, porém não custa nada tentar:
class function ExtrairAno(aDate:TDateTime):integer; overload; class function ExtrairAno(aDate:TDateTime):string; overload;
GOSTEI 0
Anderson Farias
04/11/2009
|porém quando programava em Delphi 2007, voce podia também fazer não só o Overload
|(Sobrecarga) como também o Override (Sobrescrita) de functions.
Sim, o Delphi suporta sobrecarga, mas o pré-requisito para sobrecarga é que os métodos tenham *assinatura* diferente.
No caso de funções, o tipo retornado pela função não faz parte da assinatura do método e assim, mudar apenas o retorno da função e manter a mesma assinatura (parâmetros) não permite a sobrecarga. Por isso q uma solução é converter a função em procedimento fazendo assim q o valor de retorno passe a integrar a assinatura do método.
É assim no D7 e, até onde sei, continua assim até o D2010.
T+
|(Sobrecarga) como também o Override (Sobrescrita) de functions.
Sim, o Delphi suporta sobrecarga, mas o pré-requisito para sobrecarga é que os métodos tenham *assinatura* diferente.
No caso de funções, o tipo retornado pela função não faz parte da assinatura do método e assim, mudar apenas o retorno da função e manter a mesma assinatura (parâmetros) não permite a sobrecarga. Por isso q uma solução é converter a função em procedimento fazendo assim q o valor de retorno passe a integrar a assinatura do método.
É assim no D7 e, até onde sei, continua assim até o D2010.
T+
GOSTEI 0
Jorge Abreu
04/11/2009
Boa tarde a todos.
É verdade, havia me esquecido disto, e que não era para esquecer, pois no Java funciona de forma semelhante.
Neste caso, uma solução que traria ao nosso Marcos, seria declarar um dos parâmetros aDate de uma das funções como String, pois eu acho melhor voce tratar data como String para fazer o que ele pretende, ou seja extrair ano, dia, mes, pois assim permite voce utilizar a função copy. Vejamos o código abaixo.
Isto é só uma sugestão
GOSTEI 0
Marcos Iwazaki
04/11/2009
Obrigado pela ajuda o pessoal que respondeu.
Vou decidir ainda como vou fazer, mas acho que pelo jeito vou acabar optando pelo modo de criar outro nome p o metodo
ExtrairAnoString
T+
Vou decidir ainda como vou fazer, mas acho que pelo jeito vou acabar optando pelo modo de criar outro nome p o metodo
ExtrairAnoString
T+
GOSTEI 0