Comecei hoje a fazer um experimento comigo mesmo: me desafiar a estudar mais de uma linguagem de programação por dia, dividindo certinho cada horário que vou me dedicar a cada uma delas. Isso porque eu estava sentindo que focar apenas em uma linguagem me fazia limitar o quanto eu poderia aprender. Por isso, decidi fazer este experimento de passar duas semanas estudando algumas linguagens, mas ainda assim mantendo um foco principal em uma delas, que neste caso é o Java.
Porém, nesta semana dei uma pausa nele e estou focando em outra que vou chamar de "Sublinguagem", que é o SQL. Isso porque agora, como vou entrar nas partes mais avançadas e trabalhar com frameworks como o Spring Boot Data, quero aprender a base do SQL e também outras ferramentas que dependem dele, como PostgreSQL e MongoDB, assim adquirindo conhecimento para lidar tanto com bancos relacionais quanto não relacionais.
E já que SQL, ao meu ver, não é tão complicado — a sintaxe é bem simples de aprender — resolvi também estudar outras linguagens que podem me ajudar mais para frente, como Kotlin e Go. Futuramente, pretendo dar uma olhada também na parte de frontend, explorando Angular, TypeScript e Tailwind. No backend, quero estudar AWS Cloud, Docker Compose e Terraform. Sei que isso vai levar tempo, mas quero ver se consigo quebrar o paradigma de estudar apenas uma única linguagem.
Com isso, este foi o meu resultado: meu primeiro código em Kotlin (depois, claro, do famoso "Hello World!").
Kotlin GameFinder:
package com.gamefinder.app
import com.gamefinder.app.infra.HttpExecute
fun main(args : Array<String>) {
val client = HttpExecute.Generate.http()
println("Enter a id:")
val id = readLine()
val json = client.body(id)
println("Json: $json")
}
package com.gamefinder.app.infra
import com.gamefinder.app.exceptions.HttpRequestException
import java.io.IOException
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
class HttpExecute(
private val client: HttpClient,
) {
private val url = "https://www.cheapshark.com/api/1.0/games?id="
fun <R> execute(
id: String? = null,
function: (HttpResponse<String>) -> R
): R {
try {
val request = HttpRequest
.newBuilder(URI.create(url + id))
.build();
val response = this.client
.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
return function(response)
} catch (e: InterruptedException) {
Thread.currentThread().interrupt()
throw HttpRequestException("Thread interrupted when trying to access the URL: ${url + id} | ${e.message}" );
} catch (e: IOException) {
throw HttpRequestException("Error when accessing the URL: ${url + id} | ${e.message}");
}
}
fun body(url: String?): String {
return execute(url) { response -> response.body() }
}
companion object Generate {
fun http(): HttpExecute {
return HttpExecute(HttpClient.newHttpClient());
}
}
}
Dei uma lida na documentação dele, vi algumas coisas em fóruns e usei um pouco o ChatGPT para tirar algumas dúvidas, mas nunca pedi a resposta direta para a questão. O resultado está acima.