<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: JLScript</title>
    <description>The latest articles on DEV Community by JLScript (@eoh_lczinn).</description>
    <link>https://dev.to/eoh_lczinn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4059515%2F174a79f4-8ff1-4754-bf1e-1e77abf116ff.png</url>
      <title>DEV Community: JLScript</title>
      <link>https://dev.to/eoh_lczinn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eoh_lczinn"/>
    <language>en</language>
    <item>
      <title>JLScript: Guia Completo da Sintaxe, do Básico ao Avançado</title>
      <dc:creator>JLScript</dc:creator>
      <pubDate>Sat, 03 Oct 2026 22:41:07 +0000</pubDate>
      <link>https://dev.to/eoh_lczinn/jlscript-guia-completo-da-sintaxe-do-basico-ao-avancado-28hb</link>
      <guid>https://dev.to/eoh_lczinn/jlscript-guia-completo-da-sintaxe-do-basico-ao-avancado-28hb</guid>
      <description>&lt;h1&gt;
  
  
  🧛 JLScript — Do Básico ao Avançado
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Aprenda JLScript do primeiro &lt;code&gt;mostrar()&lt;/code&gt; até APIs, banco de dados, dispositivos e interfaces.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;JLScript, também chamado de &lt;strong&gt;JLS&lt;/strong&gt;, é uma linguagem de programação criada com o objetivo de possuir uma sintaxe simples, legível e agradável para quem está começando, sem impedir a criação de projetos maiores.&lt;/p&gt;

&lt;p&gt;Os arquivos da linguagem utilizam a extensão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.jls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste guia vamos começar absolutamente do zero.&lt;/p&gt;

&lt;p&gt;No final, você já terá visto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;variáveis;&lt;/li&gt;
&lt;li&gt;valores;&lt;/li&gt;
&lt;li&gt;operadores;&lt;/li&gt;
&lt;li&gt;condições;&lt;/li&gt;
&lt;li&gt;loops;&lt;/li&gt;
&lt;li&gt;funções;&lt;/li&gt;
&lt;li&gt;listas;&lt;/li&gt;
&lt;li&gt;objetos;&lt;/li&gt;
&lt;li&gt;tratamento de erros;&lt;/li&gt;
&lt;li&gt;módulos;&lt;/li&gt;
&lt;li&gt;aliases;&lt;/li&gt;
&lt;li&gt;tempo;&lt;/li&gt;
&lt;li&gt;APIs;&lt;/li&gt;
&lt;li&gt;banco de dados;&lt;/li&gt;
&lt;li&gt;dispositivos;&lt;/li&gt;
&lt;li&gt;interfaces gráficas;&lt;/li&gt;
&lt;li&gt;organização de projetos.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  1. Seu primeiro programa
&lt;/h1&gt;

&lt;p&gt;Todo programador começa inevitavelmente imprimindo texto no terminal. A humanidade construiu compiladores, sistemas operacionais e inteligência artificial para, no fim, escrever &lt;code&gt;"Olá, mundo!"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Em JLScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mostrar("Olá, mundo!")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A função &lt;code&gt;mostrar()&lt;/code&gt; envia um valor para a saída do programa.&lt;/p&gt;

&lt;p&gt;Podemos executar várias instruções:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mostrar("Olá!")
mostrar("Estou aprendendo JLScript")
mostrar("Meu primeiro programa está funcionando")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  2. Variáveis
&lt;/h1&gt;

&lt;p&gt;Variáveis são espaços usados para guardar informações.&lt;/p&gt;

&lt;p&gt;No JLScript existem três formas principais de declaração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va nome = "Lucas"
let idade = 20
ins ativo = true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois podemos utilizar os valores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va linguagem = "JLScript"

mostrar(linguagem)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Valores básicos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Texto
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va nome = "JLScript"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Número inteiro
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va idade = 20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Número decimal
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va preco = 19.90
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Booleano
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va online = true
va bloqueado = false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Valor vazio
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va resultado = null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos juntar tudo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va nome = "Lucas"
va idade = 20
va programador = true
va projeto = "JLScript"

mostrar(nome)
mostrar(idade)
mostrar(programador)
mostrar(projeto)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  3. Operadores matemáticos
&lt;/h1&gt;

&lt;p&gt;JLScript suporta operações matemáticas comuns.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va soma = 10 + 5
va subtracao = 10 - 5
va multiplicacao = 10 * 5
va divisao = 10 / 5
va resto = 10 % 3

mostrar(soma)
mostrar(subtracao)
mostrar(multiplicacao)
mostrar(divisao)
mostrar(resto)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Incremento
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va numero = 1

numero++

mostrar(numero)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Decremento
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va numero = 10

numero--

mostrar(numero)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  4. Comparações
&lt;/h1&gt;

&lt;p&gt;Comparações produzem normalmente um resultado verdadeiro ou falso.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va idade = 20

mostrar(idade &amp;gt; 18)
mostrar(idade &amp;lt; 18)
mostrar(idade &amp;gt;= 18)
mostrar(idade &amp;lt;= 18)
mostrar(idade == 20)
mostrar(idade != 20)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alguns operadores importantes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operador&lt;/th&gt;
&lt;th&gt;Significado&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;==&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;igual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!=&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;diferente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;maior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;menor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;gt;=&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;maior ou igual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;=&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;menor ou igual&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  5. Operadores lógicos
&lt;/h1&gt;

&lt;p&gt;Também podemos juntar várias condições.&lt;/p&gt;

&lt;h2&gt;
  
  
  E
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va idade = 20
va autorizado = true

se (idade &amp;gt;= 18 &amp;amp;&amp;amp; autorizado) {
    mostrar("Entrada permitida")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  OU
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va admin = false
va moderador = true

se (admin || moderador) {
    mostrar("Acesso permitido")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  NÃO
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va bloqueado = false

se (!bloqueado) {
    mostrar("Usuário liberado")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  6. Condições
&lt;/h1&gt;

&lt;p&gt;Condições permitem executar diferentes partes do programa.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;se&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va idade = 20

se (idade &amp;gt;= 18) {
    mostrar("Você é maior de idade")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;se&lt;/code&gt; e &lt;code&gt;senao&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va idade = 16

se (idade &amp;gt;= 18) {
    mostrar("Maior de idade")
} senao {
    mostrar("Menor de idade")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  7. Condições em inglês
&lt;/h1&gt;

&lt;p&gt;JLScript também possui estruturas equivalentes em inglês.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va idade = 20

if (idade &amp;gt;= 18) {
    mostrar("Adulto")
} else {
    mostrar("Menor")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Importante:&lt;/strong&gt; mantenha o idioma da estrutura consistente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Evite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;se (idade &amp;gt;= 18) {
    mostrar("Ok")
} else {
    mostrar("Não")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefira:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;se (idade &amp;gt;= 18) {
    mostrar("Ok")
} senao {
    mostrar("Não")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (idade &amp;gt;= 18) {
    mostrar("Ok")
} else {
    mostrar("Não")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  8. Várias condições
&lt;/h1&gt;

&lt;p&gt;Podemos verificar mais de uma possibilidade.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va nota = 8

se (nota &amp;gt;= 9) {
    mostrar("Excelente")
} senao se (nota &amp;gt;= 7) {
    mostrar("Aprovado")
} senao se (nota &amp;gt;= 5) {
    mostrar("Recuperação")
} senao {
    mostrar("Reprovado")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  9. Enquanto
&lt;/h1&gt;

&lt;p&gt;Quando queremos repetir algo enquanto uma condição for verdadeira:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va numero = 1

enquanto (numero &amp;lt;= 5) {
    mostrar(numero)

    numero++
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado esperado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1
2
3
4
5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em inglês:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va numero = 1

while (numero &amp;lt;= 5) {
    mostrar(numero)

    numero++
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  10. Para
&lt;/h1&gt;

&lt;p&gt;Quando já sabemos como a repetição deve avançar, podemos utilizar &lt;code&gt;para&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;para (va i = 0; i &amp;lt; 10; i++) {
    mostrar(i)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em inglês:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for (va i = 0; i &amp;lt; 10; i++) {
    mostrar(i)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  11. Pare
&lt;/h1&gt;

&lt;p&gt;Podemos interromper um loop.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;para (va i = 0; i &amp;lt; 10; i++) {

    se (i == 5) {
        pare
    }

    mostrar(i)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando &lt;code&gt;i&lt;/code&gt; chegar a &lt;code&gt;5&lt;/code&gt;, o loop será interrompido.&lt;/p&gt;

&lt;p&gt;Em inglês:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;break
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  12. Continuar
&lt;/h1&gt;

&lt;p&gt;Podemos ignorar uma iteração específica.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;para (va i = 0; i &amp;lt; 10; i++) {

    se (i == 5) {
        continuar
    }

    mostrar(i)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse exemplo, o número &lt;code&gt;5&lt;/code&gt; não será mostrado.&lt;/p&gt;

&lt;p&gt;Em inglês:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;continue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  13. Funções
&lt;/h1&gt;

&lt;p&gt;Funções permitem criar blocos reutilizáveis.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func saudacao() {
    mostrar("Olá!")
}

saudacao()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos receber parâmetros:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func saudacao(nome) {
    mostrar("Olá " + nome)
}

saudacao("Lucas")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  14. Retornando valores
&lt;/h1&gt;

&lt;p&gt;Uma função também pode devolver um resultado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func soma(a, b) {
    retorne a + b
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora podemos utilizar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va resultado = soma(10, 5)

mostrar(resultado)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  15. Forma curta de função
&lt;/h1&gt;

&lt;p&gt;JLScript também suporta uma forma curta de declaração.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;soma(a, b) {
    retorne a + b
}

mostrar(soma(10, 5))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  16. Parâmetros padrão
&lt;/h1&gt;

&lt;p&gt;Podemos definir valores que serão usados caso nenhum argumento seja informado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func saudacao(nome = "Mundo") {
    mostrar("Olá " + nome)
}

saudacao()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Olá Mundo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;saudacao("Lucas")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Olá Lucas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  17. Argumentos nomeados
&lt;/h1&gt;

&lt;p&gt;JLScript permite deixar chamadas maiores mais legíveis.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func criarUsuario(nome, idade, ativo = true) {
    mostrar(nome)
    mostrar(idade)
    mostrar(ativo)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos chamar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;criarUsuario(
    nome = "Lucas",
    idade = 20,
    ativo = true
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim fica muito mais fácil descobrir o significado de cada valor.&lt;/p&gt;

&lt;p&gt;Compare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;criarUsuario("Lucas", 20, true)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;criarUsuario(
    nome = "Lucas",
    idade = 20,
    ativo = true
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em chamadas grandes, a segunda forma normalmente é muito mais clara.&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Funções anônimas
&lt;/h1&gt;

&lt;p&gt;Também podemos criar uma função sem nome.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va dobro = func(numero) {
    retorne numero * 2
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Utilizando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mostrar(dobro(10))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Funções anônimas ficam especialmente importantes quando começamos a trabalhar com callbacks.&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Listas
&lt;/h1&gt;

&lt;p&gt;Uma lista permite armazenar vários valores.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va linguagens = [
    "JLScript",
    "Python",
    "JavaScript"
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos acessar um elemento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mostrar(linguagens[0])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também podemos guardar números:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va numeros = [
    10,
    20,
    30,
    40
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  20. Objetos
&lt;/h1&gt;

&lt;p&gt;Objetos agrupam informações relacionadas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va usuario = {
    nome: "Lucas",
    idade: 20,
    programador: true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acessando propriedades:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mostrar(usuario.nome)
mostrar(usuario.idade)
mostrar(usuario.programador)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso é muito melhor do que criar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va usuarioNome = "Lucas"
va usuarioIdade = 20
va usuarioProgramador = true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;principalmente quando o programa começa a crescer.&lt;/p&gt;




&lt;h1&gt;
  
  
  21. Escolha
&lt;/h1&gt;

&lt;p&gt;Quando temos várias opções bem definidas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va opcao = 2

escolha (opcao) {

    caso 1 {
        mostrar("Cadastrar")
    }

    caso 2 {
        mostrar("Entrar")
    }

    caso 3 {
        mostrar("Sair")
    }

    padrao {
        mostrar("Opção inválida")
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A forma inglesa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;switch (opcao) {

    case 1 {
        mostrar("Cadastrar")
    }

    case 2 {
        mostrar("Entrar")
    }

    default {
        mostrar("Opção inválida")
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  22. Tratamento de erros
&lt;/h1&gt;

&lt;p&gt;Programas reais falham.&lt;/p&gt;

&lt;p&gt;Arquivo não existe, conexão cai, servidor some, usuário faz coisa inexplicável. Normal.&lt;/p&gt;

&lt;p&gt;JLScript possui estruturas para tratamento de erros.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tente {

    mostrar("Executando operação")

} capture (erro) {

    mostrar("Ocorreu um erro")
    mostrar(erro)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  23. Finalmente
&lt;/h1&gt;

&lt;p&gt;Podemos executar um bloco independentemente de ocorrer erro.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tente {

    mostrar("Executando")

} capture (erro) {

    mostrar("Erro encontrado")

} finalmente {

    mostrar("Processo finalizado")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em inglês:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try {

    mostrar("Executando")

} catch (error) {

    mostrar(error)

} finally {

    mostrar("Finalizado")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  24. Bibliotecas
&lt;/h1&gt;

&lt;p&gt;Até agora usamos principalmente recursos básicos da linguagem.&lt;/p&gt;

&lt;p&gt;Para funcionalidades maiores, JLScript possui módulos.&lt;/p&gt;

&lt;p&gt;Importando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #math
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  25. Vários imports
&lt;/h1&gt;

&lt;p&gt;Podemos importar mais de um módulo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import [
    #math,
    #json,
    #file
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  26. Alias de biblioteca
&lt;/h1&gt;

&lt;p&gt;Também podemos mudar o nome utilizado dentro do código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #database como db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;representa o módulo &lt;code&gt;#database&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Um IntelliSense correto deve entender isso.&lt;/p&gt;

&lt;p&gt;Depois de:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ele deve mostrar &lt;strong&gt;somente recursos pertencentes ao módulo &lt;code&gt;#database&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  27. Tempo
&lt;/h1&gt;

&lt;p&gt;JLScript possui suporte para trabalhar com durações de maneira legível.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;esperar(2 segundos)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mostrar("Dois segundos passaram")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos utilizar outras unidades:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;esperar(500 ms)

esperar(1 segundo)

esperar(2 minutos)

esperar(1 hora)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  28. Tempo atual
&lt;/h1&gt;

&lt;p&gt;JLScript possui um objeto global relacionado ao tempo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va agora = tempo.agora()

mostrar(agora)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  29. Executar algo depois
&lt;/h1&gt;

&lt;p&gt;Podemos agendar uma função.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tempo.depois(2 segundos, func() {

    mostrar("Executado depois de 2 segundos")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui aparece um conceito importante:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func() {
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;é uma função anônima usada como callback.&lt;/p&gt;




&lt;h1&gt;
  
  
  30. Repetir automaticamente
&lt;/h1&gt;

&lt;p&gt;Também podemos executar uma função em intervalos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va timer = tempo.cada(1 segundo, func() {

    mostrar("tick")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  31. Criando uma API
&lt;/h1&gt;

&lt;p&gt;Agora começamos a entrar em recursos mais avançados.&lt;/p&gt;

&lt;p&gt;Importamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criamos o servidor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va app = api.criar(3000)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora criamos uma rota:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.get("/", func(req, res) {

    res.enviar("Olá pelo JLScript!")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E iniciamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.iniciar()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Programa completo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #api

va app = api.criar(3000)

app.get("/", func(req, res) {

    res.enviar("Olá pelo JLScript!")
})

app.iniciar()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  32. Retornando objetos em uma API
&lt;/h1&gt;

&lt;p&gt;Podemos trabalhar com dados estruturados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.get("/usuario", func(req, res) {

    va usuario = {
        nome: "Lucas",
        linguagem: "JLScript",
        online: true
    }

    res.enviar(usuario)
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui usamos juntos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;módulo;&lt;/li&gt;
&lt;li&gt;rota;&lt;/li&gt;
&lt;li&gt;callback;&lt;/li&gt;
&lt;li&gt;objeto;&lt;/li&gt;
&lt;li&gt;variável;&lt;/li&gt;
&lt;li&gt;resposta HTTP.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  33. Consumindo uma API
&lt;/h1&gt;

&lt;p&gt;O módulo também pode ser usado para requisições HTTP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #api

va resposta = api.obter(
    "https://api.exemplo.com/usuarios"
)

mostrar(resposta)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  34. Banco de dados
&lt;/h1&gt;

&lt;p&gt;Importamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #database como db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora abrimos SQLite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va banco = db.sqlite("app.db")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos executar uma instrução:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;banco.executar(
    "CREATE TABLE usuarios (id INTEGER PRIMARY KEY, nome TEXT)"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Programa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #database como db

va banco = db.sqlite("app.db")

banco.executar(
    "CREATE TABLE usuarios (id INTEGER PRIMARY KEY, nome TEXT)"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  35. Dispositivos
&lt;/h1&gt;

&lt;p&gt;JLScript também possui recursos voltados a conexões e dispositivos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #connector
import #mobile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma conexão ADB pode ser criada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va conexao = connector.adb(
    "192.168.1.2",
    5555,
    timeout = 20 segundos
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repare em:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;timeout = 20 segundos
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui utilizamos ao mesmo tempo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;argumento nomeado;&lt;/li&gt;
&lt;li&gt;valor numérico;&lt;/li&gt;
&lt;li&gt;unidade de tempo.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  36. Mobile
&lt;/h1&gt;

&lt;p&gt;Depois de obter a conexão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va celular = mobile.conectar(conexao)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos trabalhar com o objeto retornado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mostrar(celular.estatisticas())
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #connector
import #mobile

va conexao = connector.adb(
    "192.168.1.2",
    5555,
    timeout = 20 segundos
)

va celular = mobile.conectar(conexao)

mostrar(celular.estatisticas())
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  37. Criando interfaces
&lt;/h1&gt;

&lt;p&gt;Agora podemos entrar em uma área diferente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import [
    #ui,
    #style
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criamos uma janela:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va app = ui.janela()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adicionamos um título:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.titulo("Meu aplicativo")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  38. Estrutura da interface
&lt;/h1&gt;

&lt;p&gt;Podemos definir elementos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.ui({

    main(class="app") {

        h1("Bem-vindo")

        p("Aplicação criada com JLScript")

        button(class="acao") {
            text = "Entrar"
        }
    }
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui começamos a trabalhar com uma sintaxe especializada para interfaces.&lt;/p&gt;




&lt;h1&gt;
  
  
  39. Estilo
&lt;/h1&gt;

&lt;p&gt;Depois podemos aplicar estilo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.style({

    background("#101010"),

    color("#ffffff")
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  40. Abrindo a janela
&lt;/h1&gt;

&lt;p&gt;Por fim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.abrir()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aplicação completa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import [
    #ui,
    #style
]

va app = ui.janela()

app.titulo("JLScript App")

app.ui({

    main(class="app") {

        h1("Bem-vindo")

        p("Aplicação criada com JLScript")

        button(class="acao") {
            text = "Entrar"
        }
    }
})

app.style({

    background("#101010"),

    color("#ffffff")
})

app.abrir()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  41. Organizando funções
&lt;/h1&gt;

&lt;p&gt;Programação avançada não significa escrever código mais complicado.&lt;/p&gt;

&lt;p&gt;Na maioria das vezes significa dividir melhor o problema.&lt;/p&gt;

&lt;p&gt;Ruim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va preco = 30
va quantidade = 4
va subtotal = preco * quantidade

se (subtotal &amp;gt; 100) {
    subtotal = subtotal * 0.9
}

mostrar(subtotal)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos transformar essa lógica em função:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func calcularTotal(preco, quantidade) {

    va subtotal = preco * quantidade

    se (subtotal &amp;gt; 100) {
        retorne subtotal * 0.9
    }

    retorne subtotal
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va total = calcularTotal(30, 4)

mostrar(total)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A lógica ficou reutilizável.&lt;/p&gt;




&lt;h1&gt;
  
  
  42. Escopo
&lt;/h1&gt;

&lt;p&gt;Variáveis criadas dentro de uma função pertencem àquele contexto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func calcular() {

    va resultado = 10 + 5

    mostrar(resultado)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;resultado&lt;/code&gt; existe dentro da função.&lt;/p&gt;

&lt;p&gt;Esse conceito fica cada vez mais importante conforme o projeto cresce.&lt;/p&gt;




&lt;h1&gt;
  
  
  43. Juntando módulos
&lt;/h1&gt;

&lt;p&gt;Podemos importar vários sistemas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import [
    #api,
    #database,
    #json
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora o programa pode ter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;servidor;&lt;/li&gt;
&lt;li&gt;banco;&lt;/li&gt;
&lt;li&gt;processamento de dados.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  44. Projeto maior
&lt;/h1&gt;

&lt;p&gt;Vamos juntar vários conceitos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import [
    #api,
    #database
]

va banco = database.sqlite("usuarios.db")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criamos uma função:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func criarUsuario(nome, idade) {

    se (nome == null) {
        retorne false
    }

    banco.executar(
        "INSERT INTO usuarios (nome, idade) VALUES (?, ?)"
    )

    retorne true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora criamos a API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va app = api.criar(3000)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criamos uma rota:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.get("/", func(req, res) {

    res.enviar({
        linguagem: "JLScript",
        status: "online"
    })
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E iniciamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.iniciar()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  45. Projeto completo
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import [
    #api,
    #database
]

va banco = database.sqlite("usuarios.db")

func criarUsuario(nome, idade) {

    se (nome == null) {
        retorne false
    }

    banco.executar(
        "INSERT INTO usuarios (nome, idade) VALUES (?, ?)"
    )

    retorne true
}

va app = api.criar(3000)

app.get("/", func(req, res) {

    res.enviar({
        linguagem: "JLScript",
        status: "online"
    })
})

app.iniciar()

mostrar("Servidor iniciado")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo utilizamos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;imports;&lt;/li&gt;
&lt;li&gt;módulos;&lt;/li&gt;
&lt;li&gt;banco de dados;&lt;/li&gt;
&lt;li&gt;variáveis;&lt;/li&gt;
&lt;li&gt;funções;&lt;/li&gt;
&lt;li&gt;parâmetros;&lt;/li&gt;
&lt;li&gt;condições;&lt;/li&gt;
&lt;li&gt;retorno;&lt;/li&gt;
&lt;li&gt;callbacks;&lt;/li&gt;
&lt;li&gt;objetos;&lt;/li&gt;
&lt;li&gt;API HTTP.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  46. Do básico ao avançado
&lt;/h1&gt;

&lt;p&gt;Você começou aqui:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mostrar("Olá, mundo!")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois aprendeu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va nome = "Lucas"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Passou para:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;se (idade &amp;gt;= 18) {
    mostrar("Maior")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func soma(a, b) {
    retorne a + b
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Até chegar em:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e construir aplicações que podem trabalhar com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs;&lt;/li&gt;
&lt;li&gt;HTTP;&lt;/li&gt;
&lt;li&gt;banco de dados;&lt;/li&gt;
&lt;li&gt;arquivos;&lt;/li&gt;
&lt;li&gt;JSON;&lt;/li&gt;
&lt;li&gt;tempo;&lt;/li&gt;
&lt;li&gt;rede;&lt;/li&gt;
&lt;li&gt;dispositivos;&lt;/li&gt;
&lt;li&gt;interfaces;&lt;/li&gt;
&lt;li&gt;testes;&lt;/li&gt;
&lt;li&gt;compilação.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧛 Cores Dracula para JLScript
&lt;/h1&gt;

&lt;p&gt;Para documentação e editores, uma identidade visual inspirada no &lt;strong&gt;Dracula Theme&lt;/strong&gt; pode utilizar aproximadamente estas categorias:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Elemento JLScript&lt;/th&gt;
&lt;th&gt;Cor Dracula&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;se&lt;/code&gt;, &lt;code&gt;senao&lt;/code&gt;, &lt;code&gt;func&lt;/code&gt;, &lt;code&gt;retorne&lt;/code&gt;, &lt;code&gt;import&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Pink &lt;code&gt;#ff79c6&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strings&lt;/td&gt;
&lt;td&gt;Yellow &lt;code&gt;#f1fa8c&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Números&lt;/td&gt;
&lt;td&gt;Purple &lt;code&gt;#bd93f9&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;#api&lt;/code&gt;, &lt;code&gt;#ui&lt;/code&gt;, &lt;code&gt;#database&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Cyan &lt;code&gt;#8be9fd&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Funções nativas&lt;/td&gt;
&lt;td&gt;Green &lt;code&gt;#50fa7b&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unidades de tempo&lt;/td&gt;
&lt;td&gt;Orange &lt;code&gt;#ffb86c&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Comentários&lt;/td&gt;
&lt;td&gt;Comment &lt;code&gt;#6272a4&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Texto normal&lt;/td&gt;
&lt;td&gt;Foreground &lt;code&gt;#f8f8f2&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fundo&lt;/td&gt;
&lt;td&gt;Background &lt;code&gt;#282a36&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;O arquivo Markdown não controla essas cores sozinho. O syntax highlighter do site/editor precisa possuir uma gramática JLScript e um tema Dracula.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  📚 Ordem recomendada de estudo
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;mostrar()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;valores&lt;/li&gt;
&lt;li&gt;variáveis&lt;/li&gt;
&lt;li&gt;operadores&lt;/li&gt;
&lt;li&gt;condições&lt;/li&gt;
&lt;li&gt;loops&lt;/li&gt;
&lt;li&gt;funções&lt;/li&gt;
&lt;li&gt;listas&lt;/li&gt;
&lt;li&gt;objetos&lt;/li&gt;
&lt;li&gt;tratamento de erros&lt;/li&gt;
&lt;li&gt;imports&lt;/li&gt;
&lt;li&gt;módulos&lt;/li&gt;
&lt;li&gt;tempo&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;banco de dados&lt;/li&gt;
&lt;li&gt;dispositivos&lt;/li&gt;
&lt;li&gt;UI&lt;/li&gt;
&lt;li&gt;organização de projetos&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  Conclusão
&lt;/h1&gt;

&lt;p&gt;JLScript foi criada para permitir que alguém comece com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mostrar("Olá")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sem exigir uma quantidade absurda de conhecimento inicial.&lt;/p&gt;

&lt;p&gt;Mas a mesma linguagem pode continuar acompanhando o programador quando ele começa a trabalhar com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #api
import #database
import #connector
import #ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A ideia não é apenas possuir uma sintaxe simples.&lt;/p&gt;

&lt;p&gt;A ideia é criar um ecossistema no qual seja possível começar aprendendo programação e continuar evoluindo até construir aplicações maiores.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;JLScript: simples para começar, poderosa para continuar.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>jlscript</category>
      <category>ai</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>JLScript — Identidade Visual Oficial</title>
      <dc:creator>JLScript</dc:creator>
      <pubDate>Sat, 03 Oct 2026 00:58:33 +0000</pubDate>
      <link>https://dev.to/eoh_lczinn/jlscript-identidade-visual-oficial-5eih</link>
      <guid>https://dev.to/eoh_lczinn/jlscript-identidade-visual-oficial-5eih</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ieppeoseo7fdom383op.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ieppeoseo7fdom383op.png" alt=" " width="461" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feita para aprender. Criada para evoluir.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>jlscript</category>
      <category>ai</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>JLScript: criando uma linguagem de programação brasileira do zero</title>
      <dc:creator>JLScript</dc:creator>
      <pubDate>Tue, 29 Sep 2026 15:32:39 +0000</pubDate>
      <link>https://dev.to/eoh_lczinn/jlscript-criando-uma-linguagem-de-programacao-brasileira-do-zero-3nha</link>
      <guid>https://dev.to/eoh_lczinn/jlscript-criando-uma-linguagem-de-programacao-brasileira-do-zero-3nha</guid>
      <description>&lt;h1&gt;
  
  
  🇧🇷 JLScript: criando uma linguagem de programação brasileira do zero
&lt;/h1&gt;

&lt;p&gt;Em 2026 comecei um projeto que inicialmente parecia relativamente simples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;criar minha própria linguagem de programação.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O nome dela é &lt;strong&gt;JLScript&lt;/strong&gt;, ou simplesmente &lt;strong&gt;JLS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Os arquivos utilizam a extensão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.jls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No começo eu queria principalmente experimentar uma sintaxe que fosse simples para mim.&lt;/p&gt;

&lt;p&gt;Só que existe um pequeno problema quando você decide criar uma linguagem:&lt;/p&gt;

&lt;p&gt;você começa querendo interpretar algumas linhas de código e, quando percebe, está estudando lexer, parser, AST, runtime, escopos, compiladores, bytecode, concorrência, módulos e sabe-se lá mais o quê.&lt;/p&gt;

&lt;p&gt;Foi exatamente o que aconteceu.&lt;/p&gt;




&lt;h1&gt;
  
  
  O que é JLScript?
&lt;/h1&gt;

&lt;p&gt;JLScript é uma linguagem de programação brasileira que estou desenvolvendo principalmente em &lt;strong&gt;C++&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Minha ideia é combinar três coisas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;simplicidade
     +
produtividade
     +
capacidade de crescer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não quero criar simplesmente outro Python ou outro JavaScript.&lt;/p&gt;

&lt;p&gt;Naturalmente existem ideias inspiradas em linguagens que já utilizamos, mas também estou experimentando decisões próprias.&lt;/p&gt;

&lt;p&gt;Hoje a arquitetura do projeto já envolve:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Código .jls
    │
    ▼
  Lexer
    │
    ▼
  Parser
    │
    ▼
   AST
    │
    ├──────────────┐
    ▼              ▼
Interpreter     Compiler
    │              │
    ▼              ▼
 Runtime        C++ / Bytecode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Português e inglês
&lt;/h1&gt;

&lt;p&gt;Uma das ideias do JLScript é permitir construções em português e inglês.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;se (idade &amp;gt;= 18) {
    mostrar('Maior de idade')
} senao {
    mostrar('Menor de idade')
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também posso escrever:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (idade &amp;gt;= 18) {
    mostrar('Maior de idade')
} else {
    mostrar('Menor de idade')
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não quero que o português limite a linguagem ao Brasil.&lt;/p&gt;

&lt;p&gt;Quero justamente que ela possa ter uma identidade brasileira e ainda permitir uma escrita familiar para desenvolvedores de outros lugares.&lt;/p&gt;




&lt;h1&gt;
  
  
  Variáveis
&lt;/h1&gt;

&lt;p&gt;Atualmente a linguagem trabalha com formas como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;va nome = 'Lucas'
let linguagem = 'JLScript'
ins ativo = true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O runtime possui valores fundamentais como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;STRING
NUMBER
BOOLEAN
NULL
LIST
OBJECT
FUNCTION
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Funções
&lt;/h1&gt;

&lt;p&gt;Uma função pode ser declarada explicitamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func saudacao(nome) {
    mostrar('Olá, ' + nome)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas também criei uma forma curta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;soma(a, b) {
    retorne a + b
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A ideia é simples:&lt;/p&gt;

&lt;p&gt;se a estrutura já deixa claro que aquilo é uma função, por que obrigatoriamente adicionar outra palavra?&lt;/p&gt;




&lt;h1&gt;
  
  
  Uma decisão diferente no switch
&lt;/h1&gt;

&lt;p&gt;Outra coisa que quis experimentar foi o &lt;code&gt;switch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Em várias linguagens encontramos algo parecido com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;case:
    ...
    break
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No JLScript posso fazer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;switch (opcao) {

    case 1 {
        mostrar('Iniciar')
    }

    case 2 {
        mostrar('Configurações')
    }

    default {
        mostrar('Sair')
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada &lt;code&gt;case&lt;/code&gt; possui seu próprio bloco.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;}&lt;/code&gt; já deixa claro onde aquele caso termina.&lt;/p&gt;

&lt;p&gt;Então não preciso escrever &lt;code&gt;break&lt;/code&gt; apenas para repetir essa informação.&lt;/p&gt;

&lt;p&gt;Essa acabou se tornando uma das filosofias que tento seguir:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se a própria estrutura do código já expressa claramente uma intenção, não quero adicionar sintaxe apenas porque outra linguagem faz assim.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  O projeto cresceu bastante
&lt;/h1&gt;

&lt;p&gt;A primeira versão oficial, &lt;strong&gt;JLScript 1.0.0&lt;/strong&gt;, era muito menor.&lt;/p&gt;

&lt;p&gt;Ela possuía principalmente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if / else
funções
switch
for
loops
execução básica
CLI inicial
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O terminal também era extremamente simples.&lt;/p&gt;

&lt;p&gt;Um dos comandos era basicamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jls version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas aquela versão provou a coisa mais importante:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a linguagem funcionava.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Depois disso comecei a expandir o projeto.&lt;/p&gt;

&lt;p&gt;Hoje sua estrutura envolve áreas como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;JLScript
│
├── Lexer
├── Parser
├── AST
├── Interpreter
├── Runtime
├── Execution Engine
├── Modules
├── Compiler
├── C++ Generator
├── Bytecode Compiler
├── CLI
└── Standard Library
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  CLI própria
&lt;/h1&gt;

&lt;p&gt;A linguagem também ganhou uma CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o crescimento do projeto começaram a surgir comandos como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jls run programa.jls
jls repl
jls build programa.jls
jls compile programa.jls
jls &lt;span class="nb"&gt;test
&lt;/span&gt;jls &lt;span class="nb"&gt;fmt
&lt;/span&gt;jls lint
jls fix
jls doctor
jls update
jls dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Minha intenção é que o terminal seja parte importante da experiência da linguagem, e não simplesmente um executável que recebe um arquivo.&lt;/p&gt;




&lt;h1&gt;
  
  
  Compilação
&lt;/h1&gt;

&lt;p&gt;Também comecei a experimentar compilação.&lt;/p&gt;

&lt;p&gt;Um dos caminhos atuais utiliza geração de C++:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;programa.jls
     │
     ▼
   Lexer
     │
     ▼
   Parser
     │
     ▼
    AST
     │
     ▼
Gerador C++
     │
     ▼
Compilador C++
     │
     ▼
 Executável
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou seja, o código continua sendo escrito em JLScript, mas pode passar por uma etapa de geração e compilação nativa.&lt;/p&gt;




&lt;h1&gt;
  
  
  Bytecode
&lt;/h1&gt;

&lt;p&gt;Existe também um compilador de bytecode.&lt;/p&gt;

&lt;p&gt;Arquivos compilados podem utilizar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.jlb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O fluxo é aproximadamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;programa.jls
     │
     ▼
Bytecode Compiler
     │
     ▼
 programa.jlb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa parte ainda faz parte da evolução da arquitetura da linguagem.&lt;/p&gt;




&lt;h1&gt;
  
  
  Bibliotecas
&lt;/h1&gt;

&lt;p&gt;Outra área que cresceu bastante foi o sistema de bibliotecas.&lt;/p&gt;

&lt;p&gt;Uma biblioteca pode ser importada assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import #json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou várias:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import [#api, #database, #json]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O projeto já explora diferentes áreas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#api
#database
#json
#ui
#style
#mobile
#connector
#compiler
#thread
#time
#file
#process
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Minha ideia é manter funcionalidades especializadas fora do núcleo sempre que fizer sentido.&lt;/p&gt;




&lt;h1&gt;
  
  
  Interface gráfica usando JLScript
&lt;/h1&gt;

&lt;p&gt;Uma das partes que mais estou experimentando atualmente é permitir construir interfaces utilizando a própria linguagem.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import [#ui, #style]

va app = ui.janela()

app.titulo('Login')

app.ui({

    div {
        text = 'Bem-vindo'
        button = 'Entrar'
    }

})

app.style({
    fundo: '#101010',
    cor: '#ffffff',
    largura: 800,
    altura: 600
})

app.abrir()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A ideia é aproximar algumas facilidades encontradas no desenvolvimento web da criação de aplicações usando JLScript.&lt;/p&gt;

&lt;p&gt;Ainda existe bastante trabalho nessa área, mas é uma das partes que pretendo continuar desenvolvendo.&lt;/p&gt;




&lt;h1&gt;
  
  
  Criar uma linguagem me obrigou a aprender muita coisa
&lt;/h1&gt;

&lt;p&gt;Essa provavelmente foi a parte mais interessante do projeto.&lt;/p&gt;

&lt;p&gt;Quando comecei, eu não precisava conhecer profundamente todas as peças de uma linguagem.&lt;/p&gt;

&lt;p&gt;Só que cada funcionalidade nova apresentava outro problema.&lt;/p&gt;

&lt;p&gt;O processo acabou ficando parecido com isto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ideia
  ↓
Implementação
  ↓
Erro
  ↓
"por que isso aconteceu?"
  ↓
Pesquisa
  ↓
entender uma parte nova
  ↓
corrigir
  ↓
ter outra ideia
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criar funções me fez estudar escopos.&lt;/p&gt;

&lt;p&gt;Criar sintaxe me fez estudar lexer e parser.&lt;/p&gt;

&lt;p&gt;Criar execução me levou ao runtime.&lt;/p&gt;

&lt;p&gt;Criar build me levou a compiladores.&lt;/p&gt;

&lt;p&gt;Criar bibliotecas me levou a APIs nativas.&lt;/p&gt;

&lt;p&gt;Criar servidores me levou a sockets e concorrência.&lt;/p&gt;

&lt;p&gt;Uma coisa vai puxando outra.&lt;/p&gt;




&lt;h1&gt;
  
  
  Por que o nome JLScript?
&lt;/h1&gt;

&lt;p&gt;O nome também tem uma história.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;J       = Joicy
L       = Lucas
Script  = Programação
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Portanto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;J + L + Script
      ↓
   JLScript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;J&lt;/code&gt; não significa Java nem JavaScript.&lt;/p&gt;

&lt;p&gt;Ele representa &lt;strong&gt;Joicy Costa&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;L&lt;/code&gt; representa &lt;strong&gt;Lucas Aguiel Dos Santos De Oliveira&lt;/strong&gt;, criador da linguagem.&lt;/p&gt;

&lt;p&gt;Joicy não participa tecnicamente do desenvolvimento. A presença dela no nome é uma homenagem e registra uma parte da minha história pessoal dentro do projeto.&lt;/p&gt;




&lt;h1&gt;
  
  
  JLScript e JLScripter
&lt;/h1&gt;

&lt;p&gt;Também existe uma diferença entre alguns nomes que utilizo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;JLScript
    ↓
a linguagem

JLS
    ↓
abreviação

.jls
    ↓
extensão dos arquivos

JLScripter
    ↓
o ecossistema ao redor da linguagem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então penso no JLScripter aproximadamente assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;JLScripter
│
├── JLScript
├── Interpreter
├── Runtime
├── Compiler
├── Bytecode
├── CLI
├── Libraries
├── Developer Tools
└── Documentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Ainda está em desenvolvimento
&lt;/h1&gt;

&lt;p&gt;JLScript não é um projeto que considero terminado.&lt;/p&gt;

&lt;p&gt;Ainda existem partes experimentais, coisas que quero redesenhar, bibliotecas que precisam amadurecer e bastante trabalho no runtime e nas ferramentas.&lt;/p&gt;

&lt;p&gt;Mas comparar a primeira versão com o projeto atual é uma das coisas que mais me motiva a continuar.&lt;/p&gt;

&lt;p&gt;Começou assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;condições
funções
loops
switch
CLI simples
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E está caminhando para:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;linguagem
+
runtime
+
compilação
+
bytecode
+
bibliotecas
+
interfaces
+
ferramentas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ainda tenho bastante coisa para construir.&lt;/p&gt;

&lt;p&gt;E provavelmente bastante coisa para quebrar também. Faz parte de criar uma linguagem do zero. 😅&lt;/p&gt;




&lt;h1&gt;
  
  
  🇧🇷 JLScript
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Uma linguagem brasileira em desenvolvimento.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simples para começar. Estruturada para crescer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Criada por &lt;strong&gt;Lucas Aguiel Dos Santos De Oliveira&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>cpp</category>
      <category>compilers</category>
      <category>opensource</category>
    </item>
    <item>
      <title>JLScript: A Programming Language Designed to Make Coding Simpler</title>
      <dc:creator>JLScript</dc:creator>
      <pubDate>Sun, 02 Aug 2026 20:12:29 +0000</pubDate>
      <link>https://dev.to/eoh_lczinn/jlscript-a-programming-language-designed-to-make-coding-simpler-2ml3</link>
      <guid>https://dev.to/eoh_lczinn/jlscript-a-programming-language-designed-to-make-coding-simpler-2ml3</guid>
      <description>&lt;p&gt;&lt;em&gt;Programming should be accessible to everyone, not just people who already speak English fluently.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;JLScript is a programming language under development with the goal of making programming simpler, more intuitive, and more accessible, especially for beginners and Portuguese-speaking developers.&lt;/p&gt;

&lt;p&gt;The language uses clear and readable syntax while keeping modern programming concepts such as variables, functions, conditions, loops, arrays, objects, modules, and API integration.&lt;/p&gt;

&lt;p&gt;Main Goals&lt;br&gt;
Simple and clean syntax&lt;br&gt;
Easy to learn&lt;br&gt;
High readability&lt;br&gt;
Modern language features&lt;br&gt;
Open-source project&lt;br&gt;
Community-driven development&lt;br&gt;
Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;va&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Lucas&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="nx"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;cumprimentar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;mostrar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Olá, &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;cumprimentar(nome)&lt;/li&gt;
&lt;li&gt;Planned Features&lt;/li&gt;
&lt;li&gt;Native HTTP API consumption&lt;/li&gt;
&lt;li&gt;Package manager&lt;/li&gt;
&lt;li&gt;Cross-platform compiler&lt;/li&gt;
&lt;li&gt;VS Code extension&lt;/li&gt;
&lt;li&gt;Modules and libraries&lt;/li&gt;
&lt;li&gt;Object-Oriented Programming&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Arrays and dictionaries&lt;/li&gt;
&lt;li&gt;File system support&lt;/li&gt;
&lt;li&gt;JSON support&lt;/li&gt;
&lt;li&gt;CLI tools&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;JLScript is still under active development, and many features are being improved continuously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feedback, ideas, and contributions are always welcome.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://github.com/eohlczinn/jlscript.dev" rel="noopener noreferrer"&gt;https://github.com/eohlczinn/jlscript.dev&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Official Website:&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://jlscript-dev.vercel.app/#/docs" rel="noopener noreferrer"&gt;https://jlscript-dev.vercel.app/#/docs&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>news</category>
    </item>
  </channel>
</rss>
