Parlare di linguaggi di programmazione “brutti” può essere un po’ soggettivo, poiché le preferenze personali e le esigenze del progetto possono influenzare le opinioni sugli strumenti di sviluppo. Tuttavia, ci sono alcuni linguaggi che sono spesso considerati meno attraenti o più problematici per varie ragioni. Ecco alcuni esempi di quelli che provocano volutamente il mal di testa.
Whitespace
Si tratta di un linguaggio di programmazione in cui solo spazi, tabulazioni e ritorni a capo sono significativi, mentre i caratteri alfanumerici sono ignorati. La sua sintassi basata sulla formattazione del testo può essere considerata poco pratica e difficile da leggere per molte persone. Questo programma, se eseguito con un interprete Whitespace, stamperà “Hello World!” sulla console. Anche se può sembrare criptico, i diversi spazi vuoti, tabulazioni e ritorni a capo sono interpretati dall’interprete Whitespace per produrre l’output desiderato.
Ecco un programma “Hello World!” scritto in Whitespace, un linguaggio di programmazione che utilizza solo spazi vuoti, tabulazioni e ritorni a capo per la sintassi, mentre ignora completamente i caratteri alfanumerici. Se non vedete nulla, è normale (i caratteri del linguaggio non sono visibili essendo spazi, il codice originale si trova qui – con compilatore online – e qui).
Brainfuck
È un linguaggio estremamente minimale e oscuro, composto da soli otto comandi. La sua sintassi è stata progettata per essere il più possibile compatta, ma questo rende il codice difficile da scrivere, leggere e comprendere. Gli 8 comandi di Brainfuck sono:
>
: Incrementa il puntatore della cella di memoria di 1.
<
: Decrementa il puntatore della cella di memoria di 1.
+
: Incrementa il valore della cella di memoria puntata di 1.
-
: Decrementa il valore della cella di memoria puntata di 1.
[
: Se il valore della cella di memoria puntata è zero, salta all’istruzione dopo la corrispondente parentesi chiusa ]
.
]
: Torna all’istruzione dopo la corrispondente parentesi aperta [
, se il valore della cella di memoria puntata non è zero.
.
: Stampa il valore ASCII della cella di memoria puntata.
,
: Legge un carattere dalla tastiera e lo memorizza nella cella di memoria puntata come valore ASCII.
Esempio di Hello World:
+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]
<.>>>++++++++++[<+++++++++>-]<—.<<<<.+++.——.——–.>>+.>++++++++++.
Scrivere una calcolatrice per la radice quadrata in Brainfuck può essere piuttosto complesso, dato che il linguaggio è molto limitato e non offre operazioni matematiche avanzate come la radice quadrata. Tuttavia, possiamo implementare una semplice approssimazione della radice quadrata utilizzando metodi come il metodo di Newton-Raphson. Ecco un’implementazione di base:
Esempio di calcolo della radice quadrata in brainfuck:
,>++++++[-<——–>]
[<+>-]
<,———-[
[>]+[<]
>[<->++++++++++++<]
>[-<+>]
<[->>+<<]>[-<+>]
>[<+>-]
>+>[-]
<+<[>[->+>+<<]>[-<+>]>[-<+>]>[-<+>]>[-<+>]<<<<<<[->>>>+<<<<[->>>+>>+<<<]>>>-]<<<<<<[->>>>+<<<<[->>+>>+<<<]>-]<<<<<<[->>>>+<<<<[->>+>+<<<]>>>>-]<<<<<<[->>>>>+<<<<<<[->>>>>+<<<+<]>>>>>>-]<<<<<<[->>>>>+<<<<<<[->>>>+<<+<]<<>>>>>>-]<<<<<<[->>>>>+<<<<<<[->>>>+<<<<<+<]>>>>>>>-]<<<<<<[->>>>>>+<<<<<<<[->>>>+<<+<<<<<]<<>>>>>>-]<<<<<<[->>>>>>+<<<<<<<[->>>>>+<<<<<<<+<]>>>>>>>>-]<<<<<<[->>>>>>>+<<<<<<<<<[->>>>>>>+<<<<<<<+<]>>>>>>>>>-]<<<<<<[->>>>>>>+<<<<<<<<<[->>>>>>+<<<<<<<+<]>>>>>>>>>>-]<<<<<<[->>>>>>>>+<<<<<<<<<<<[->>>>>>>>+<<<<<<<<<+<]>>>>>>>>>>>-]<<<<<<[->>>>>>>>+<<<<<<<<<<<[->>>>>>>+<<<<<<<<<+<]>>>>>>>>>>>>-]<<<<<<[->>>>>>>>>+<<<<<<<<<<[->>>>>>>>>+<<<<<<<<<<<+<]>>>>>>>>>>>>>-]<<<<<<[->>>>>>>>>+<<<<<<<<<<[->>>>>>>>+<<<<<<<<<<+<]>>>>>>>>>>>>>>-]<<<<<<[->>>>>>>>>>+<<<<<<<<<<<<[->>>>>>>>>+<<<<<<<<<<+<]>>>>>>>>>>>>>>–]
]
<[<->[-]]
Bello vero?
INTERCAL
Creato per essere il più ostico possibile, INTERCAL è noto per la sua sintassi bizzarra e poco intuitiva. È stato concepito come uno scherzo e non è mai stato adottato per scopi pratici. L’obiettivo di INTERCAL era più un esperimento umoristico che un linguaggio di programmazione pratico. Questo codice:
PLEASE READ OUT #13
DO ,1 <- #238
PLEASE DO ,1 SUB #1 <- #13
DO ,1 SUB #2 <- #0
DO ,1 SUB #3 <- #13
DO ,1 SUB #4 <- #194
DO ,1 SUB #5 <- #15
DO ,1 SUB #6 <- #225
PLEASE DO ,1 SUB #7 <- #248
PLEASE DO ,1 SUB #8 <- #13
DO ,1 SUB #9 <- #10
PLEASE DO ,1 SUB #10 <- #255
DO ,1 SUB #11 <- #220
DO ,1 SUB #12 <- #194
DO READ OUT ,1
PLEASE GIVE UP
restituisce :
ICL099I PROGRAMMER IS OVERLY POLITE ON THE WAY TO 18 CORRECT SOURCE AND RESUBNIT
e non sappiamo perchè.
Malbolge
Proclamato come il “linguaggio di programmazione più difficile da usare”, Malbolge è stato progettato appositamente per essere estremamente complicato da comprendere e scrivere. La sua sintassi è estremamente contorta e il suo funzionamento è quasi insensato.
Malbolge è un linguaggio di programmazione estremamente difficile da comprendere e utilizzare. È progettato per essere il più ostico possibile ed è noto per essere quasi impossibile da scrivere manualmente. Tuttavia, ecco un esempio di programma “Hello World!” in Malbolge:
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc
Questo codice Malbolge stampa “Hello World!” quando viene eseguito nell’interprete Malbolge. Tuttavia, capire come funziona questo codice e come sia stato generato richiederebbe una conoscenza approfondita del linguaggio e delle sue peculiarità. Malbolge è stato creato appositamente per essere estremamente difficile da comprendere e scrivere, quindi programmi anche relativamente semplici possono sembrare completamente incomprensibili.
PHP (si scherza)
Sebbene PHP sia stato ampiamente utilizzato per lo sviluppo web, è spesso criticato per la sua sintassi incostante, la mancanza di coerenza e alcune caratteristiche considerate obsolette o poco sicure. Nonostante ciò, ha una vasta base di utenti e continua a essere uno dei linguaggi principali per la creazione di siti web dinamici.
Scrivere un codice orribile in PHP va contro i principi della buona programmazione e della manutenibilità del codice. Tuttavia, posso fornirti un esempio di codice che viola molte best practice e che potrebbe essere considerato “orribile” in quanto difficile da leggere, comprendere e mantenere. Si prega di notare che non promuovo questo tipo di pratica di programmazione:
<?php
// Codice orribile in PHP
class A {
public $name;
private $age;
public function __construct($n, $a) {
$this->name = $n;
$this->setAge($a);
}
public function setAge($a) {
if (is_numeric($a) && $a > 0 && $a < 150) {
$this->age = $a;
} else {
throw new Exception("Invalid age!");
}
}
public function getAge() {
return $this->age;
}
}
function prntA($a) {
echo "<br><b>Name: </b>" . $a->name . "<br>";
echo "<b>Age: </b>" . $a->getAge() . "<br>";
}
$person1 = new A("John", 25);
$person2 = new A("Jane", 30);
$person3 = new A("Jack", -5); // Età negativa
prntA($person1);
prntA($person2);
prntA($person3);
?>
Questo codice presenta diversi problemi, tra cui:
- Mancanza di separazione tra logica e presentazione.
- Gestione degli errori poco chiara.
- Assenza di validazione approfondita dei dati di input.
- Utilizzo di eccezioni per gestire scenari comuni come età negativa.
- Mancanza di coerenza nello stile di codifica.
- Mancanza di commenti e documentazione.
- Potenziali vulnerabilità di sicurezza.
Questi sono solo alcuni esempi di ciò che potrebbe rendere un codice PHP orribile. È importante scrivere codice che sia chiaro, coerente, sicuro e manutenibile.
Conclusioni
Questi sono solo alcuni esempi di linguaggi che potrebbero essere considerati “brutti” per vari motivi. Tuttavia, è importante ricordare che ogni linguaggio ha le sue peculiarità e che quello che potrebbe sembrare poco attraente per alcuni potrebbe essere perfettamente adatto per altri, a seconda delle esigenze del progetto e delle preferenze personali.