Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: DuckDNS e a Evolução dos Clientes para Atualização Dinâmica de DNS: Uma Análise do Cliente em Harbour como Alternativa ao Java

_Créditos das imagens: [JozefJarosciak](https://github.com/JozefJarosciak/DuckDNSClient/blob/master/DuckDNSClient/src/logo.png) **DuckDNS e a Evolução dos Clientes para Atualização Dinâmica de DNS: Uma Análise do Cliente em Harbour como Alternativa ao Java** --- ### **Introdução ao DuckDNS: Simplificando o DNS Dinâmico** O DuckDNS é um serviço gratuito de DNS dinâmico que permite associar subdomínios (como `meudominio.duckdns.org`) a um IP dinâmico, ideal para usuários que desejam acessar dispositivos domésticos (como servidores, câmeras IP ou NAS) remotamente, mesmo sem um IP fixo. Sua simplicidade e integração com tecnologias como Let's Encrypt para certificados SSL o tornam popular em projetos de automação e hospedagem pessoal. --- ### **O Cliente Java Tradicional: Características e Limitações** O cliente Java desenvolvido por JozefJarosciak (disponível [aqui](https://raw.githubusercontent.com/JozefJarosciak/DuckDNSClient/refs/heads/master/DuckDNSClient/src/duckdns...

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