Newsgroup: it.comp.www.php
Titolo: [Sintassi] Ohibo', mi e' venuto un dubbio....

Salve
Da molto tempo scrivo codice cercando di renderlo il piu' leggibile 
possibile, a me ed ai miei collaboratori. Faccio questo evitando 
aperture forsennate di <?php ?> ogni venti caratteri, ma usando qualcosa 
del tipo
	$filtro=FiltroCerca($cn,$Q);
	$intestazione=Intestazione($cn);
	$menu=MenuAnag();
 
	if($a==1){
	$z= "
		$intestazione
		<div id='divHomeMenu'>
			$menu
		</div>
		<div id='aFiltro'>
			$filtro
		</div>
	";
	}else{
		$z="-no-";
	}
	echo $z;
Trovo che sia estremamente chiaro soprattutto nella gestione dei cicli, 
perche' apertura e chiusura sono evidenti, perche' l'indentazione non e' 
fatta a  capocchia e perche' in fin dei conti il sorgente deve essere 
letto dall'umano :)
Ho letto oggi che ci sono pareri contrastanti.
Voi che dite?


Il mio parere:
1- Codice PHP da una parte, codice HTML dall'altra. Se hai una
situazione in cui sono "mischiati" già è tutto illeggibile e
probabilmente sbagliato.
2- Il codice da compilare va letto da un umano, il codice da
interpretare va letto dall'umano E dall'interprete. Se l'umano in
questione è un programmatore PHP riconosce comunque determinati
pattern di codice, scritti quindi in una certa maniera, dipendente dal
linguaggio e dalla piattaforma. Il problema non è "scriverlo chiaro",
ma "scriverlo come ci si aspetterebbe di leggerlo". I programmatori
assembler infatti riescono a leggere il codice (loro e di altri) alla
stessa velocità con cui un programmatore php legge in php. Non sono
geni, sono "abituati".
3- Se esci dagli schemi perchè magari l'algoritmo da implementare è
particolare, metti un commento. Sono fatti apposta per questo. Come
sopra, troppi commenti sono controproducenti: vanno scritti lunghi,
chiari e solo dove serve.
Il codice che hai postato, oltretutto, ha l'indentazione sbagliata.
All'inizio della riga 6 ($z="...") ci dovrebbe essere una spaziatura
(sei dentro l'if).
Spero d'essere stato almeno in parte utile!
Ciao!

 Ho letto oggi che ci sono pareri contrastanti.
Oltre a quello che ho gia` scritto sulla separazione "piu` totale 
possibile" tra PHP e HTML.
Io sono anche per la separazione totale tra HTML, CSS e Javascript, se e` 
per quello... :)
Bye.

 All'inizio della riga 6 ($z="...") ci dovrebbe essere una spaziatura
  Ecco, qui ho una domanda da fare. Vedo dappertutto cose come questa:
if (condizione) {
  comando;
}
  che a me proprio non va giu'. Da sempre preferisco:
if (condizione)
{
  comando;
}
  Qualcuno sa spiegarmi se e' una tecnica scorretta e quindi da
abbandonare o se semplicemente e' una questione di gusti? A me pare
tanto meglio, la corrispondenza delle graffe e' assai piu' evidente! :-o
  Opinioni in merito?
  Grazie e un saluto,
-- 
Gianfranco Bertozzi
Linux User #183585

 }
E` una questione di gusti. La prima sintassi e` definita anche "K&R" (da 
Kernighan & Ritchie, gli autori del libro "The C Language", nonche` 
creatori del linguaggio C), la seconda e` quella ANSI.
Io uso un misto (tendente al K&R, che e` stato anche il mio primo manuale 
di programmazione, se escludiamo quello del Basic del C64).
Per classi e funzioni/metodi vado a capo, mentre per i blocchi (if, for, 
array, ecc.) metto la parentesi sulla stessa riga.
Ma io metto le graffe anche quando non servono. Alcuni programmatori fanno 
cosi`:
if (condizione)
	comando();
blablabla;
io faccio cosi`:
if (condizione) {
	comando();
}
blablabla;
In questo modo so che la graffa chiusa corrisponde all'if senza 
possibilita` di errore (mi sono capitati programmatori che NON mettevano 
le parentesi e poi incasinavano l'indentazione, dando "false speranze" sul 
funzionamento del codice...)
Bye.
Bye.

 tanto meglio, la corrispondenza delle graffe e' assai piu' evidente! :-o
Gusti, assolutamente gusti. Fintanto che il parser sintattico di PHP non si
lamenta...
A me piace di piu' la prima, ma forse perche' ho studiato sul KR.
L'importante e' che tu sia in grado di rileggere il tuo codice anche dopo un
anno o piu' :)
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Nothing is faster than the speed of light.
To prove this to yourself, try opening the refrigerator door
before the light comes on.


Allora allora... c'è da specificare una cosa importante sul
posizionamento delle parentesi graffe.
In C, secondo K&R:
i blocchi di cicli o condizioni sono sulla stessa riga:
if (condizione) {
    ...
}
i blocchi di funzione sono su righe differenti:
int main()
{
    ...
}
C'è un motivo valido abbastanza per tutto questo: le funzioni sono gli
unici "tipi di blocchi" che non possono essere annidati.
Per quanto riguarda questo specifico problema quindi personalmente
metto in riga quello che è annidabile e non in riga quello che non lo
è.
Ad esempio in C scrivo
int pippo()
{
mentre in javascript
function pippo() {
Ma io, lo so, sono un bacchettone bastardo

 le parentesi e poi incasinavano l'indentazione, dando "false speranze" sul 
  Se c'e' una cosa che ho imparato fin da "piccolo" e' proprio quella di
indentare e commentare il codice. :-)
  Saluti e grazie,


 puo'? :-)
Perche` (nel mio caso) tipicamente la definizione di una classe o di una 
funzione richiede molto piu` spazio. Per esempio:
public class My_Database_Table extends Base_Db_Table implements 
General_Db_Table_Interface
{
    blablabla
}
Lo posso scrivere cosi`:
public class My_Database_Table
  extends Base_Db_Table
  implements General_Db_Table_Interface
{
    blablabla
}
che e` piu` pulito e comprensibile, mentre se mettessi la graffa sulla 
stessa riga mi incasinerei la vita.
Stessa cosa per le funzioni che possono avere molte variabili, nel qual 
caso uso lo stesso "trucco" di mettere una variabile per riga, magari con 
un commento vicino, se non uso phpdoc.
In tutti gli altri casi, invece, generalmente non ho questa esigenza, ma 
faccio uno strappo alla regola in alcuni if molto complessi:
if (
  $pippo == $pluto
  ||
  $pippo == elaboraQualcosaSu($pluto)
  ||
  $altracondizione blabla
) {
    blablabla
}
Tipicamente, in questi casi, uso uno o due spazi invece del tab (che tengo 
impostato a 4) per l'"header", e il tab normale per il corpo.
Ma sono casi molto rari. In un caso come questo, per esempio, avrei 
tentato di usare uno switch.
Bye.

 ;
anche io, estremamente piu' leggibile (almeno per me). Stessa cosa con 
le parentesi.
Grazie a tutti
Giorgio

 blablabla;
Concordo in pieno.
Al limite, ma proprio se è una funzione di due righe,
if (condizione) comando;
-- 
ValeRyo
CBR600F "Cerbero" - 
http://www.slimmit.com/go.asp?6YT
GamerTag: 
http://card.mygamercard.net/IT/nxe/ValeRyo76.png
 

 unici "tipi di blocchi" che non possono essere annidati.
  Capisco (e qui rispondo ad) Alessandro quando parla di lughezza della
linea, e' logico e pratico. Capisco meno i vostri gusti perche' e'
indubbiamente piu' bello mettere le graffe come le metto io. ;-p
  Non capisco invece perche' influisce il fatto che si possa o non si
possa annidare. Cosa cambia ai fini del posizionamento delle parentesi?
E' solo un fattore estetico per distinguere le due cose o c'e' un motivo
pratico che mi sfugge?
  Che dite, la facciamo partire una flame sul posizionamento delle
parentesi? ;-)
  Un saluto e grazie per la pazienza,



*yawn* sempre la stessa storia. ;-)

 possibile" tra PHP e HTML.
Come conviene operare per tenere il pi� possibile separato php e html?
Simone 

 Come conviene operare per tenere il più possibile separato php e html?
Usare un sistema di template.
