Livro (e-book) Harbour

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Livro (e-book) Harbour

Mensagem por Vlademiro »

Pessoal, estou escrevendo, nas horas vagas, um e-book sobre introdução a programação usando Harbour. O público alvo são os aprendizes que não tem experiência com linguagens de programação e ppessoas sem muito conhecimento técnico . Os usuários que tem experiência podem se beneficiar também pois eu estou tendo o cuidado de seguir toda a sequencia dos livros de programação. Em anexo tem o que fiz até agora.

O formato é bem acadêmico pois estou aproveitando um template em latex que usei para publicar uma monografia que eu fiz. Depois eu posto os fontes em latex no github para quem quiser acrescentar algo.
Introdução a programação com Harbour.pdf
(659.46 KiB) Baixado 981 vezes
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Livro (e-book) Harbour

Mensagem por fladimir »

Parabéns!!! com certeza é e será de grande valia...

Fiquei surpreso e lisongeado ao ver meu nickname nos agradecimentos em meio a tantos feras do fórum...

Eu / nós q agradecemos a toda comunidade q participa trocando idéias e contribuindo para o crescimento e compartilhamento do conhecimento.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Livro (e-book) Harbour

Mensagem por Vlademiro »

Criei um repositório no github com os fontes do e-book e com o PDF também.
Vou ficar atualizando por lá e notificando aqui pelo fórum.

https://github.com/vlademiro/ebook-harbour
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Livro (e-book) Harbour

Mensagem por janio »

Cara, Muuuito bom! Show! Parabéns1

Gosto muito dessa parte teórica pq com o passar dos anos a gente vai usando muita coisa sem ter um conhecimento 'adequado' da função ou comando. Até hj eu não sabia, por exemplo, a diferença entre FUNCTION e PROCEDURE.

Show

Jânio
(eterno aprendiz)
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Livro (e-book) Harbour

Mensagem por Vlademiro »

Bom saber que lhe ajudou. :)Pos

Eu tb estou aprendendo enquanto escrevo.
E, sendo bem sincero, já cometi erros grotescos por falta de teoria.
Não como esse seu que, no final das contas, é irrelevante.

Por exemplo, eu não sabia que a função SELECT é diferente do comando SELECT

Isso me causou algumas dores de cabeça, só porque eu não tinha me dedicado um pouco mais nas leituras.

Código: Selecionar todos


FUNCTION MAIN()
LOCAL x

   USE BRW
   
   USE BRW_COL NEW
   
   SELE BRW
   x := SELECT( "BRW_COL" )
   ? x // A funçao SELECT retorna apenas o valor, mas não muda de área
   ? "A AREA ATUAL E ", ALIAS()
   
   SELECT ("BRW_COL") // O comando SELECT muda de área
   ? "A AREA ATUAL E ", ALIAS()
   
   // Apenas um espaço faz muita diferença SELECT( carea ) <> SELECT (carea)
   
   


RETURN NIL


Vivendo e aprendendo.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Livro (e-book) Harbour

Mensagem por JoséQuintas »

Está bem didático, mas...
Vamos reclamar um pouquinho.... rs

Porque nos exemplos sempre define UTF-8 como codepage?

Tem exemplo com comando abreviado, isso é péssimo, porque exemplos costumam ser base pra outras coisas

Porque mostra parêntesis como sendo parte de PROCEDURE e mostra como equivalente a FUNCTION?
Não tem, por exemplo, isto:

Código: Selecionar todos

PROCEDURE Main
   ? 5
   RETURN
Porque mostra exemplo de variáveis, e só depois fala sobre variáveis?

Porque mostra LOCAL x AS CHARACTER, se isso não é totalmente válido, pra não dizer que não serve pra nada?

Porque tem exemplo pra procurar erro de compilação que só ocorre se usar -w3 -es2, que talvez nem seja apresentado como erro?

Porque trata IF-ELSE-ELSEIF-ENDIF, e não faz o mesmo em DO CASE-CASE-OTHERWISE-ENDCASE?

Tipos de variáveis LOCAL, PRIVATE, PUBLIC, STATIC, acho que traduzir isso é um erro.
Aliás... apesar de costumarem traduzir PRIVATE pra PRIVADA, seria mais adequado PARTICULAR.
Como PRIVATE não tem nada de particular, melhor nem traduzir mesmo.

Aliás... o fórum também trata mensagens PRIVADAS, que são mensagens PARTICULARES.
Esse termo também é usado pelo governo, sobre empresas públicas e privadas, que seriam empresas públicas ou particulares.
Com os políticos atuais, a parte pública é que parece uma PRIVADA, grande e cheia.... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Livro (e-book) Harbour

Mensagem por JoséQuintas »

Até hj eu não sabia, por exemplo, a diferença entre FUNCTION e PROCEDURE
Olhei novamente o manual, pra localizar aonde mostra isso, mas não encontrei.
Talvez tenha passado direto.
Ia confirmar se foi mostrado como as variáveis são tratadas diferentes, mas não encontrei.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Livro (e-book) Harbour

Mensagem por JoséQuintas »

Aproveitando....
Neste final de semana encontrei um erro no manual do Harbour (3.2/3.4)

doc/en/memo.txt

$SYNTAX$
hb_MemoWrit( <cFileName>, <cString>, [<lWriteEof>] ) --> lSuccess
...
<lWriteEof> Is a logic variable that settle if the "end of file"
character - Chr( 26 ) - is written to disk.
This parameter is optional. By default is true (.T.)
...
There is a third parameter (optional), <lWriteEof>, (not found in
CA-Cl*pper) which let to programmer change the default behavior of
- always - to write the EOF character, Chr( 26 ) as in CA-Cl*pper.

If there is no third parameter, nothing change, EOF is written as
in CA-Cl*pper, the same occurs when <lWriteEof> is set to .T.
But, if <lWriteEof> is set to .F., EOF char is Not written to the
end of the file.
...
hb_MemoWrit() vs MemoWrit():
hb_MemoWrit() never writes the obsolete EOF char at the end of the file.

Código: Selecionar todos

PROCEDURE Main

   hb_MemoWrit( "A", "A" )
   hb_MemoWrit( "B", "B", .F. )
   hb_MemoWrit( "C", "C", .T. )
   MemoWrit( "D", "D" )
   RETURN
no disco:

Código: Selecionar todos

14/08/2016  12:53                 1 A
14/08/2016  12:53                 1 B
14/08/2016  12:53                 1 C
14/08/2016  12:53                 2 D
O ideal seria atualizar os documentos existentes no Harbour.
O difícil é pensar em português, e escrever em inglês.... rs
Não é tão simples quanto parece.

Nota: espero que seja erro no manual mesmo, se alterarem o funcionamento de hb_MemoWrit() ferrou.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Livro (e-book) Harbour

Mensagem por Vlademiro »

Quintas, vou dar uma olhada nas suas observações, depois eu dou um retorno.

Valeu
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Livro (e-book) Harbour

Mensagem por JoséQuintas »

A diferença básica entre PROCEDURE e FUNCTION é que PROCEDURE não retorna nada, e FUNCTION retorna alguma coisa.

Geralmente em PROCEDURE usávamos PARAMETERS, que cria variáveis PRIVATE, apesar que FUNCTION também aceitava e ainda deve aceitar isso.
Já como parêntesis, as variáveis são tratadas como LOCAL.

Código: Selecionar todos

PROCEDURE Teste
   PARAMETERS a, b
   ...

FUNCTION Teste( a, b )
...
A diferença é que LOCAL só existe dentro da rotina, e PRIVATE existe a partir daquela rotina e sub-rotinas, só desaparecendo quando sair da rotina que a "criou".
Isso faz muita diferença quando se tem rotina chamando rotina, chamando rotina, chamando rotina, etc. etc. etc. onde usar o mesmo nome pode interferir no valor de rotina anterior. Ou, sendo mais prático, quando o aplicativo vai crescendo, e começa a repetir nomes, declarar como LOCAL faz toda a diferença.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Livro (e-book) Harbour

Mensagem por Vlademiro »

Vou postar as respostas. Só agora vi que vc postou algo sobre as variáveis, mas vou manter a postagem original que eu redigi no Notepad e vim aqui colar.

Segue :



* ) Porque nos exemplos sempre define UTF-8 como codepage?

Motivo 1 )

Lá no tópico 2.2.1 Uma pequena pausa para a acentuação correta tem o trecho onde eu abordo essa
questão. Alguns trechos eu resolvi adiantar para criar logo um padrão de codificação.

O público alvo é o desenvolvedor que está começando e que poderá
também usar os conhecimentos adquiridos em outras linguagens que ele possa
vir a aprender no futuro.

Atualmente esse padrão de codificação é recomendado
por vários desenvolvedores de softwares.

Por exemplo :

https://developer.gnome.org/integratio ... tml.pt_BR

https://www.w3.org/International/quest ... ngs.pt-br

(faça uma busca por UTF-8 ou UTF8 nessas páginas que da para encontrar referencias
a essa nova forma de codificar. Eles claramente estão dando prioridade a ela)

É claro que as codificações vigentes não sairão de cena, mas UTF-8 parece que está
se estabelecendo como um principal padrão para troca de dados.

--------------------------------------------------------------------------------------------------
Eu penso assim, deixar os códigos em UTF-8 mas criar um apêndice explicando como mudar para as
outras codificações como a (WIN)ANSI e o velho padrão do DOS (esqueci o nome dele, acho eque é OEM).
--------------------------------------------------------------------------------------------------

Motivo 2 ) Eu estou preparando um material com os códigos e eu estou usando o UTF-8 neles. Já tem bastante
código digitado. Se alguém me ajudar a gente pode deixar tudo em outra codificação, mas tem que alterar
todos os fontes de exemplo. Não sei se vale a pena ficar com uma codificação que está sendo claramente preterida.

* ) Tem exemplo com comando abreviado, isso é péssimo, porque exemplos costumam ser base pra outras coisas

Tem razão, com certeza eu me enganei. Eu até programo SET DATE BRIT, mas lá eu coloco sempre SET DATE BRITISH.
Eu não encontrei esse comando. Daria pra vc me mostrar copiando e colando o trecho ?

* ) Porque mostra parênteses como sendo parte de PROCEDURE e mostra como equivalente a FUNCTION?

Posso acrescentar essa forma lá. Eu só vou abordar a diferença nos tópicos sobre funções.

* ) Porque mostra exemplo de variáveis, e só depois fala sobre variáveis?

Sim, eu adiantei alguns conceitos, como uma pequena introdução as funções (para mostrar a codificação) e também as variáveis, para
tornar alguns exemplos mais interessantes. A geração Y (convivo com ela todos os dias no trabalho) tem pressa e eu não quero
que fique muito enfadonho até chegar nas estruturas de controle e de repetição.
Vou mudar a parte das variáveis para o próximo capítulo, mas a pequena introdução as funções acho que da pra deixar como está.
Ainda bem que o latex permite essas mudanças sem muita dificuldade.

* ) Porque mostra LOCAL x AS CHARACTER, se isso não é totalmente válido, pra não dizer que não serve pra nada?

Eu resolvi fazer assim porque acho que é a forma que irá prevalecer daqui para frente. No final do capítulo sobre variáveis eu
abordo isso e deixo claro que ainda é um recurso que está sendo implantado. Andei postando no forum dos desenvolvedores, mas eu
não obtive nenhuma previsão sobre a adoção dessa nova forma. Vou perguntar de novo por lá.

* ) Porque trata IF-ELSE-ELSEIF-ENDIF, e não faz o mesmo em DO CASE-CASE-OTHERWISE-ENDCASE?

Eu descrevi essas estruturas corretamente, só que em alguns pontos eu não coloquei o nome correto. Vou ter que mudar lá.

* ) Tipos de variáveis LOCAL, PRIVATE, PUBLIC, STATIC, acho que traduzir isso é um erro.

Essa parte vai ser revista, eu apenas movi para o final do livro porque será um dos últimos assuntos. Para entender totalmente
esses conceitos precisa entender primeiro o que é sub-rotina (função) para depois partir para esses conceitos de escopo e tempo
de vida da variável.


RESUMINDO TUDO

1 ) UTF-8 : deixa como está, mas cria um apêndice esclarecendo os outros padrões.
2 ) Comandos abreviados : Vou mudar, mas se vc me ajudar colando o trecho eu agradeço
3 ) Parênteses em procedure : vou acrescentar a forma sem parenteses e deixar como principal. Mas eles reaparecerão com os parâmetros. Tem que revisar bem direitinho.
4 ) Formato novo de declaração de variável (AS CHARACTER) : Vou ver com o fórum de desenvolvedores. Se não houver previsão ou demorar muito eu tiro.
5 ) Formato CASE e IF : Vou procurar o ponto e alterar
6 ) Variáveis LOCAL, PRIVATE, etc. Essa parte ainda será revisada totalmente. Os livros de Clipper (Ramalho, Vidal, etc.) traduzem esses termos, tem que ver se os outros autores também fazem assim. Não queria me distanciar muito do estilo deles.


Obrigado pelas observações. :xau
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Livro (e-book) Harbour

Mensagem por Vlademiro »

A versão atualizada é essa.

https://github.com/vlademiro/ebook-harb ... arbour.pdf

Valeu gente
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Livro (e-book) Harbour

Mensagem por Vlademiro »

Quintas, faltou essa :

Porque tem exemplo pra procurar erro de compilação que só ocorre se usar -w3 -es2, que talvez nem seja apresentado como erro?

Não achei esse falso erro. Todos os exemplos que tem erros de compilação realmente não compilam, independente de qual warning vc coloque. Esse aí vc tem que me mostar pois eu não estou encontrando.

Valeu
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Livro (e-book) Harbour

Mensagem por janio »

Vlademiro, meu conterrâneo cearense hehehe

Uma sugestão: acredito que também para o iniciamente, que é pra quem se destina seu e-book, seria bom um capítulo sobre a montagem do ambiente para compilação (isso eh chato pra caramba hehe), com links para baixar o Harbour 3.2 (acredito que é o mais usado) e também o compilador MinGW, com os respectivos ajustes do path,

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Livro (e-book) Harbour

Mensagem por JoséQuintas »

1 ) UTF-8 : deixa como está, mas cria um apêndice esclarecendo os outros padrões.
O mais comum em qualquer linguagem de programação é usar o padrão - default - que a linguagem já tem.

Quando esse leitor for olhar um aplicativo pronto, a primeira coisa que ele vai descobrir é que isso que viu no livro não está no fonte.
A segunda coisa, talvez, será estragar todo visual do aplicativo colocando UTF-8.
E talvez a terceira, seja descobrir que editores de texto não servem pra misturar codepages, e talvez seja tarde demais.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder