Postagem em destaque
_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....
- Gerar link
- X
- Outros aplicativos
Postado por
иαldσ dj
BlackTDN :: ADVPL ~ PARAMTYPE
Dessa forma é possível atribuir valor “DEFAULT” a uma variável do tipo “OBJECT”, quando “OPTIONAL”, e ainda testar se o objeto passado corresponde à Classe Definida em “ParamType”. O mesmo podemos dizer para os demais tipos. No include padrão, quando o parâmetro é opcional com valor “DEFAULT” podemos, passar no “DEFAULT”, qualquer tipo que ele “engole”; já a versão BlackTDN não: a atribuição do “DEFAULT” é feita antes da verificação do tipo da variável. O arquivo “parmtype.ch” modificado poderá ser obtido ao clicar aqui e, para o código do exemplo, aqui. |
ei-la:
1: #ifndef __PARAMTYPE_CH
2: #define __PARAMTYPE_CH
3: #xcommand PARAMEXCEPTION [ PARAM <param> VAR ] <varname> TEXT <text> [ MESSAGE <message> ] ;
4: => ;
5: [ UserException(<message>) ] ;;
6: [ UserException("argument #"+<"param">+" error, expected "+<text>) ] ;;
7: UserException("argument error in parameter "+<"varname">+", expected "+<text>)
8:
9: #xcommand CLASSPARAMEXCEPTION [ PARAM <param> VAR ] <varname> TEXT <text,...> [ MESSAGE <message> ] ;
10: => ;
11: [ UserException(<message>) ] ;;
12: [ UserException("argument #"+<"param">+" error, class expected "+\"<text>\") ] ;;
13: UserException("argument error in parameter "+<"varname">+", class expected "+\"<text>\")
14:
15: #xcommand BLOCKPARAMEXCEPTION [ PARAM <param> VAR ] <varname> TEXT <text> [ MESSAGE <message> ] ;
16: => ;
17: [ UserException(<message>) ] ;;
18: [ UserException("argument #"+<"param">+" error , return expected "+<text>) ] ;;
19: UserException("argument error in block "+<"varname">+", return expected "+<text>)
20:
21: #xcommand PARAMTYPE [ <param> VAR ] <varname> AS <type: ARRAY, BLOCK, CHARACTER, DATE, NUMERIC, LOGICAL, OBJECT> ;
22: [ , <typeN: ARRAY, BLOCK, CHARACTER, DATE, NUMERIC, LOGICAL, OBJECT> ] ;
23: [ MESSAGE <message> ] ;
24: [ <optional: OPTIONAL> ] ;
25: [ DEFAULT <uVar> ] ;
26: => ;
27: if (<.optional.>);;
28: <varname> := If(<varname> == nil,<uVar>,<varname>);;
29: endif;;
30: If !(<.optional.> .and. ValType(<varname>) == "U") .and. !(ValType(<varname>) $ Subs(<"type">,1,1) [ + Subs(<"typeN">,1,1) ]) ;;
31: PARAMEXCEPTION [ PARAM <param> VAR ] <varname> TEXT Subs(<"type">,1,1) [ + "," + Subs(<"typeN">,1,1) ]+"->"+ValType(<varname>) [ MESSAGE <message> ] ;;
32: EndIf ;;
33:
34: #xcommand PARAMTYPE [ <param> VAR ] <varname> AS BLOCK EXPECTED <expected: ARRAY, BLOCK, CHARACTER, DATE, NUMERIC, LOGICAL, OBJECT> ;
35: [ MESSAGE <message> ] ;
36: [ <optional: OPTIONAL> ] ;
37: => ;
38: If ValType(<varname>) == "B" ;;
39: __block := Eval(<varname>) ;;
40: If ValType(__block) <> Subs(<"expected"> ,1,1) ;;
41: BLOCKPARAMEXCEPTION [ PARAM <param> VAR ] <varname> TEXT Subs(<"expected">,1,1) + "->"+ValType(__block) [ MESSAGE <message> ] ;;
42: EndIf ;;
43: ElseIf !(<.optional.> .and. ValType(<varname>) == "U") ;;
44: PARAMEXCEPTION [ PARAM <param> VAR ] <varname> TEXT "B->"+ValType(<varname>) [ MESSAGE <message> ] ;;
45: EndIf
46:
47: #xcommand PARAMTYPE [ <param> VAR ] <varname> AS OBJECT CLASS <classname,...> ;
48: [ MESSAGE <message> ] ;
49: [ <optional: OPTIONAL> ] ;
50: [ DEFAULT <uVar> ] ;
51: => ;
52: if (<.optional.>);;
53: <varname> := If(<varname> == nil,<uVar>,<varname>);;
54: endif;;
55: If ValType(<varname>) == "O" ;;
56: __erro := ErrorBlock({|| "UNDEFINED"}) ;;
57: BEGIN SEQUENCE ;;
58: __classname := Upper(<varname>:ClassName()) ;;
59: END SEQUENCE ;;
60: ErrorBlock(__erro) ;;
61: If !(__classname $ Upper(\"<classname>\")) ;;
62: CLASSPARAMEXCEPTION [ PARAM <param> VAR ] <varname> TEXT <classname> [ MESSAGE <message> ] ;;
63: EndIf ;;
64: ElseIf !(<.optional.> .and. ValType(<varname>) == "U") ;;
65: PARAMEXCEPTION [ PARAM <param> VAR ] <varname> TEXT "O->"+ValType(<varname>) [ MESSAGE <message> ] ;;
66: EndIf ;;
67:
68: #xcommand PARAMTYPE [ <param> VAR ] <varname> AS <type: ARRAY, BLOCK, CHARACTER, DATE, NUMERIC, LOGICAL> ;
69: [ , <typeN: ARRAY, BLOCK, CHARACTER, DATE, NUMERIC, LOGICAL> ] ;
70: OR OBJECT CLASS <classname,...> ;
71: [ MESSAGE <message> ] ;
72: [ <optional: OPTIONAL> ] ;
73: => ;
74: If ValType(<varname>) == "O" ;;
75: PARAMTYPE [ <param> VAR ] <varname> AS OBJECT CLASS <classname> [ MESSAGE <message> ] [ <optional> ] ;;
76: Else ;;
77: PARAMTYPE [ <param> VAR ] <varname> AS <type> [, <typeN>] [ MESSAGE <message> ] [ <optional> ] ;;
78: EndIf
79: #endif
um pequeno exemplo:
1: #include "parmtype.ch"
2: User Function ParamType()
3: Return(ParamType())
4: Static Function ParamType(cVar,nVar,lVar,dVar,bVar,uVar,aVar,oVar)
5:
6: PARAMTYPE 1 VAR cVar AS CHARACTER OPTIONAL DEFAULT ""
7: PARAMTYPE 2 VAR nVar AS NUMERIC OPTIONAL DEFAULT 0
8: PARAMTYPE 3 VAR lVar AS LOGICAL OPTIONAL DEFAULT .T.
9: PARAMTYPE 4 VAR dVar AS DATE OPTIONAL DEFAULT Date()
10: PARAMTYPE 5 VAR bVar AS BLOCK OPTIONAL DEFAULT { || .F. }
11: PARAMTYPE 6 VAR uVar AS CHARACTER,NUMERIC OPTIONAL DEFAULT "0"
12: PARAMTYPE 7 VAR aVar AS ARRAY OPTIONAL DEFAULT Array(0)
13: PARAMTYPE 8 VAR oVar AS OBJECT CLASS THASH OPTIONAL DEFAULT THASH():New() //CUSTOMIZED BY BLACKTDN
14:
15: Return( NIL )
[]s
иαldσ dj
Postagens mais visitadas
Postado por
Rleg
BlackTDN :: RLeg ~ Desvendando a Função ParamBox
- Gerar link
- X
- Outros aplicativos
Postado por
иαldσ dj
Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login
- Gerar link
- X
- Outros aplicativos
Comentários
Postar um comentário