Quine implementado em Golang

Imprimindo seu proprio código fonte

Quine é um programa que consegue imprimir seu código fonte na saída padrão. O nome é em homenagem ao matemático e filosofo Willard Van Orman Quine.

Existem exemplos de Quine escritos para várias linguagens de programação, é um exercício interessante tentar escrever a sua versão e um belo desafio.

Veja bem, a regra é que não pode simplesmente abrir seu próprio código fonte e imprimir, isso seria trapaça, o que precisa fazer é que seu código seja consiga gerar na saída padrão uma versão de si mesmo sem ler de lugar nenhum.

Veja o vídeo que fizemos no Grupo de Estudos de Golang.

Implementação em Golang

A implementação em Go usa um truque simples, usamos o código das aspas para poder gerar uma string contendo apenas uma aspa e usamos print para imprimir o conteúdo da variável codigo entre duas aspas. Existem outras abordagens mas essa é a mais fácil de implementar.

package main

func main() {
	aspa := string(96)
	print(codigo, aspa, codigo, aspa)
}

const codigo = `package main
func main() {
	aspa := string(96)
	print(codigo, aspa, codigo, aspa)
}
const codigo = `

Codigo fonte do exemplo: exemplo no Golang Playground exemplo no grupo de estudos

Apesar da capacidade de criar uma copia de si mesmo soar como uma forma de criar um vírus de computador esse não é o caso aqui, geralmente um vírus simplesmente lê uma copia de si mesmo copiando da memória ou de outro arquivo, não precisa ter a dificuldade extra de implementar um Quine. Apesar que eu tenho certeza que é um desafio interessante para linguagens de script e tenho certeza que alguém deve ter usado essa ideia para fazer um vírus nem que seja apenas pelo desafio.

Esses exercícios e desafios de programação são muito úteis para quem quer se tornar um programador melhor. Aprender esses pequenos truques e alcançar as bordas do que a sua linguagem de programação favorita consegue fazer faz com que você tenha que lidar com situações fora do cotidiano e dessa forma você vai estar mais preparado para quando problemas de verdade aparecerem.

Cesar Gimenes