Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Resolvendo o Desafio "Palindrome Number" do LeetCode com XBase e TLPP

_Créditos das imagens: ChatGPT_ ### LeetCode :: **Resolvendo o Desafio "Palindrome Number" do LeetCode com XBase e TLPP** No mundo da programação, os desafios do LeetCode são uma excelente maneira de aprimorar nossas habilidades de codificação. Um desses é o desafio [**Palindrome Number** (Número Palíndromo)](https://leetcode.com/problems/palindrome-number/description/). Neste artigo, vamos explorar como resolvemos esse desafio utilizando XBase e TLPP (linguagens que possuem um poderoso conjunto de ferramentas para o desenvolvimento de soluções rápidas e eficientes). #### Descrição do Desafio O problema **Palindrome Number** exige que verifiquemos se um número inteiro é um palíndromo. Ou seja, o número deve ser lido da mesma forma de trás para frente como é lido da frente para trás. Exemplos de números palíndromos incluem: 121, 12321, etc. Já números como 123, 10, e -121 não são palíndromos, pois sua leitura invertida não é igual ao número original. A ideia é criar uma f...

BlackTDN :: LeetCode :: Implementando o Desafio "String to Integer (atoi)" em Harbour e TL++ (TOTVS Language Plus Plus)

_Créditos das imagens: Copilot_
# LeetCode :: Implementando o Desafio "String to Integer (atoi)" em Harbour e TL++ (TOTVS Language Plus Plus)

A conversão de uma string para um número inteiro é uma tarefa comum em muitos algoritmos de programação, sendo frequentemente utilizada como um exercício para demonstrar manipulação de strings e números. 
A técnica utilizada para implementar o [desafio "String to Integer"](https://leetcode.com/problems/string-to-integer-atoi) (ou `atoi`) pode variar significativamente dependendo da linguagem de programação escolhida. 
Neste artigo, vamos explorar as nuances de duas implementações do desafio, uma utilizando **Harbour** (linguagem baseada em xBase) e outra utilizando **TL++** (TOTVS Language Plus Plus, um superconjuto do dialeto xBase), comparando o estilo e as abordagens em ambas as linguagens.

## O Desafio: Converter uma String para um Número Inteiro (atoi)

O objetivo do problema é escrever uma função que converta uma string que representa um número em seu valor inteiro correspondente, lidando com sinais positivos e negativos, ignorando espaços em branco iniciais e tratando a presença de caracteres não numéricos após o número.

Abaixo, detalharemos as duas versões de código para este problema nas linguagens **Harbour** e **TL++**.

---

### 1. Implementação em **Harbour** (xBase)

**Harbour** é uma linguagem de programação baseada no **xBase** Sua sintaxe lembra o **Clipper** e **FoxPro**, com uma estrutura que favorece a legibilidade e simplicidade.

#### Versão 8.1

A implementação do `atoi` em **Harbour** pode ser vista na [versão 8.1](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/008/string_to_integer_atoi.8.1.prg). Ela começa verificando se a string está vazia e, em seguida, lida caractere a caractere, convertendo os dígitos numéricos para um valor inteiro. A lógica também trata de sinais de números negativos e ignora espaços antes e depois do número. Uma diferença entre Harbour e TLPP é a estrutura switch/case/otherwise/endswitch. Abaixo exemplo do fragmento do código:

```harbour
    // Verifica se o número é negativo
    cFirstChar:=Left(cString,1)
    switch cFirstChar
        case "-"
            nSign:=-1
            i:=2  // Começa após o sinal negativo
            exit
        case "+"
            nSign:=1
            i:=2 // Começa após o sinal positivo
            exit
        otherwise
            nSign:=1
            i:=1 //Começa a partir da posição inicial
    endswitch
```

#### Versão 8.2

Na versão [8.2](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/008/string_to_integer_atoi.8.2.prg), utilizamos a função Val() que faz exatamente o que o desafio propõe. Neste caso é preferivel usar a função nativa em detrimento de uma implementação customizada.

---

### 2. Implementação em **TL++** (TOTVS Language Plus Plus)

**TL++** é uma linguagem de programação desenvolvida pela **TOTVS** para ser usada principalmente em seu sistema de gestão empresarial (Protheus). Ela possui uma sintaxe similar ao **xBase** e outras particularidades implicitas da linguagem e da evolução independente bem como das necessidades específicas para o seus sistemas de gestão empresarial.

#### Versão 8.1

A versão [8.1](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/008/string_to_integer_atoi.8.1.tlpp) de **TL++** também implementa a conversão de string para inteiro de maneira similar ao **Harbour** com diferença, principal na estrutura do do case/case/end case:

```tlpp
    // Verifica se o numero eh negativo
    cFirstChar:=Left(cString,1)
    do case
        case (cFirstChar=="-")
            nSign:=-1
            i:=2  // Comeca apos o sinal negativo
        case (cFirstChar=="+")
            nSign:=1
            i:=2 // Comeca apos o sinal positivo
        otherwise
            nSign:=1
            i:=1 //Comeca a partir da posicacao inicial
    end case
```

#### Versão 8.2

A versão [8.2](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/008/string_to_integer_atoi.8.2.tlpp), também utilizamos a função Val() que faz exatamente o que o desafio propõe. Neste caso é preferivel usar a função nativa em detrimento de uma implementação customizada.

---

## Nuances entre as Linguagens

Embora ambos os códigos possuam lógicas semelhantes, algumas diferenças importantes surgem devido às características de cada linguagem:

1. **Sintaxe e Abordagem**:
   - **Harbour** tenta ser 100% compatível com as linguagem padrão xBase disponíveis no mercado.
   - **TL++** por definição dos designers na linguagem, apesar de ter bastante semelhança com o xBase segue outra vertente e possui bastantes particularidades intrísicas ao ambiente TOTVS Protheus

2. **Desempenho e Utilização**:
   - **Harbour** e **TL++** tem propósitos diferentes, apesar de semelhantes. Enquanto Harbour tenta suprir a necessidade de compatibilidade como Legado xBase TLPP tem um foco mais voltado para a integração com o ecossistema TOTVS e pode ser mais útil em empresas que já utilizam outros produtos da TOTVS.

3. **Manejo de Caracteres**:
   - Ambos os códigos utilizam funções semelhantes para a manipulação de caracteres e para a conversão de caracteres em números.

---

## Conclusão

As implementações do desafio "String to Integer (atoi)" em **Harbour** e **TL++** são bastante semelhantes em termos de lógica, mas as diferenças de sintaxe e a filosofia por trás de cada linguagem podem influenciar a escolha dependendo do ambiente e da necessidade do projeto. 

Se você está trabalhando em um sistema corporativo que utiliza **Harbour** ou **TL++**, entender as particularidades de cada uma dessas linguagens pode ser crucial para otimizar seu desenvolvimento e manutenção de código.

---

**Hashtags:**

#Harbour, #xBase, #TLpp, #TOTVS, #StringToInteger, #atoi, #DesafiosDeProgramação, #Leetcode, #Tecnologia, #Programação



Comentários

Postagens mais visitadas