Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
Al MWC Qualcomm annuncia una coalizione industriale per lanciare il 6G entro il 2029 e introduce agenti IA per la gestione autonoma della RAN. Ericsson, presente sul palco, conferma la direzione: le reti del futuro saranno IA-native fin dalla progettazione
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air è un ultraleggero da 1 kg con Ryzen 5 6600H, display 14" 16:10 e 16 GB LPDDR5. Offre buona portabilità, autonomia discreta e costruzione in alluminio, ma storage PCIe 3.0 e RAM saldata limitano l'espandibilità. A 549 euro sfida brand più noti nella stessa fascia di mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-04-2009, 11:58   #1
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
Exception vs "return boolean"

Ciao,
mi chiedo se ci siano particolari considerazioni a favore di una strategia rispetto all'altra. Mi riferisco alle alternative:
1) nessun metodo restituisce void; piuttosto si restituisce un booleano e lo si controlla;
2) il metodo restituisce tranquillamente void, ma genera un'eccezione se fallisce.

Cosa ne pensate? Sono sempre indeciso se adottare una strategia o l'altra...

EDIT: mi riferisco in generale alla programmazione a oggetti

Ultima modifica di guldo76 : 16-04-2009 alle 12:23.
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 12:22   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
devi rispettare il significato concettuale di valore di ritorno e di eccezione. evita di restituire un booleano solo per indicare una condizione di successo o di errore: il valore di ritorno é ció che la funzione deve calcolare, quindi se le fai restituire un booleano stai dicendo che quella funzione deve calcolare un booleano. io per indicare una condizione di errore uso sempre le eccezioni, sia in C++ sia in C# sia in Java (visto che non hai specificato il linguaggio).

tra l'altro in C++ lanciare un'eccezione spesso é piu efficiente: supponi di avere 5 chiamate annidate, 5 funzioni che si chiamano a catena e di cui l'ultima potrebbe fallire; inoltre supponi che la condizione d'errore debba essere semplicemente propagata e controllata solo "in cima", cio nella prima delle 5 funzioni.
se le 5 funzioni ritornano un booleano che indica la condizione d'errore allora devi usare 4 if, uno dopo ciascuna chiamata, mentre se usi il meccanismo delle eccezioni il flusso di esecuzione salta direttamente a monte in caso di eccezione.

naturalmente per far si' che la cosa sia realmente efficiente devi evitare la pessima abitudine di lanciare come eccezioni in C++ oggetti istanziati con new, altrimenti l'efficienza va a farsi benedire (per allocare nell'heap nel caso peggiore hai bisogno di uno switch in kernel mode, e comunque passi per tutta la trafila del CRT); piuttosto lancia un booleano:
Codice:
void callee()
{
	if (error_condition)
	{
		throw false;
	}
}

void caller()
{
	try
	{
		callee();
	}
	catch (bool error)
	{
		// ...
	}
}
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 12:28   #3
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Dipende da vari fattori decidere quale delle due usare... a mio parere delle linee guida sensate sono queste:

-interfaccia comune
Se già usi ovunque uno dei due approcci è meglio usare sempre lo stesso per non spiazzare l'user
-prestazioni
try catch dicono siano più lenti, quindi in sezioni time-critical potrebbe essere meglio bool
-probabilità di fallimento
Se l'eccezione è comune, e fornisce dei dettagli che servono a risolverla (es file mancante) indubbiamente è meglio un'eccezione.
-gravità dell'eccezione
Se dopo l'eccezione il programma è del tutto compromesso forse ha poco senso proprio lanciarla, tanto il programma andrà chiuso lo stesso.
-modo d'uso
A volte un bool può essere più elegante di una eccezione, se il caso false è perfettamente contemplato:
Codice:
if( device->createWindow() )
...
E' molto più elegante del corrispondente try...catch, almeno secondo me.

Cmq tutto ciò è del tutto IMHO
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 14:50   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Le eccezioni non sono un chè di particolare della programmazione orientata agli oggetti. Appartengono alla categoria delle condizioni nella teoria dei sistemi.

Anche un boolean può esprimere una condizione, da cui deriva l'incertezza.

Se il linguaggio non ha una sintassi ad hoc per le eccezioni chiaramente uno è costretto ad usare dei valori di controllo.

Se il linguaggio ha una sintassi ad hoc per le eccezioni allora uno DEVE usarle per la stessa ragione per cui al panettiere si chiede "uno sfilatino, grazie" e non "un cilindro, grazie". E' una questione di grammatica: se un fenomeno è identificabile con parole diverse si sceglie quella massimamente specifica.

Dunque ogni volta che incontri una condizione che determina impedimento al conseguimento di uno scopo per una causa esterna al processo che deve raggiungerlo spari un'eccezione.

In questo modo chi legge il codice sa che si è verificata una condizione che ha determinato impedimento... eccetera eccetera.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 14:55   #5
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
Quote:
Originariamente inviato da 71104 Guarda i messaggi
devi rispettare il significato concettuale di valore di ritorno e di eccezione. evita di restituire un booleano solo per indicare una condizione di successo o di errore
Grazie per la precisazione. Mi hai convinto.

Quote:
Originariamente inviato da 71104 Guarda i messaggi
naturalmente per far si' che la cosa sia realmente efficiente devi evitare la pessima abitudine di lanciare come eccezioni in C++ oggetti istanziati con new, altrimenti l'efficienza va a farsi benedire [...] piuttosto lancia un booleano
Questo purtroppo in C# non si può fare, devo lanciare un'Exception (o un'istanza di una classe che eredita da Exception).

Cmq ora faccio così: catturo l'eccezione, scrivo un log e rilancio l'eccezione stessa.

Quote:
Originariamente inviato da Tommo Guarda i messaggi
Dipende da vari fattori decidere quale delle due usare... a mio parere delle linee guida sensate sono queste:
Grazie della risposta.

Chiaramente se in un progetto si è sempre fatto in un certo modo, è opportuno continuare per la stessa strada, sicuramente.

Quote:
Originariamente inviato da Tommo Guarda i messaggi
-modo d'uso
A volte un bool può essere più elegante di una eccezione, se il caso false è perfettamente contemplato
Oh, sicuro. Se la funzione ha lo scopo di dirmi se è verificata o meno una certa condizione, di sicuro deve restituire un booleano; ma se va in errore deve generare un'eccezione, e non restituire false come se avesse potuto controllare la condizione in questione senza problemi.

Grazie mille
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 14:57   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Tommo Guarda i messaggi
-interfaccia comune
Se già usi ovunque uno dei due approcci è meglio usare sempre lo stesso per non spiazzare l'user
l'utente mica deve leggere il codice


Quote:
-prestazioni
try catch dicono siano più lenti, quindi in sezioni time-critical potrebbe essere meglio bool
"dicono" non é neanche lontanamente una "linea guida sensata"


Quote:
-probabilità di fallimento
Se l'eccezione è comune, e fornisce dei dettagli che servono a risolverla (es file mancante) indubbiamente è meglio un'eccezione.
argomentazione inutile, se servono informazioni aggiuntive basta passare un puntatore a una struct (in C/C++) o restituire un intero oggetto (in C# o Java).


Quote:
-gravità dell'eccezione
Se dopo l'eccezione il programma è del tutto compromesso forse ha poco senso proprio lanciarla, tanto il programma andrà chiuso lo stesso.
a maggior ragione in questo caso ha senso un'eccezione (non catturata) anziché una trafila di if: oltrettutto le eccezioni SEH in Windows permettono di collezionare un crash dump che l'utente puó inviare al programmatore il quale a sua volta puó caricarlo in un debugger e vedere esattamente cosa é successo.


Quote:
-modo d'uso
A volte un bool può essere più elegante di una eccezione, se il caso false è perfettamente contemplato:
Codice:
if( device->createWindow() )
...
e secondo te é perfettamente contemplato che il sistema non riesca a creare una cavolo di finestra?
qui era decisamente meglio un'eccezione.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 15:06   #7
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Dunque ogni volta che incontri una condizione che determina impedimento al conseguimento di uno scopo per una causa esterna al processo che deve raggiungerlo spari un'eccezione.
OK, facciamo un esempio. Mi devo connettere a un DB che sta su una certa macchina remota. Evito di fare tutti i controlli che magari potrei: connettività alla rete, disponibilità della macchina, stato dell'istanza del DB, etc...
Provo semplicemente a connettermi: se riesco, OK, altrimenti genero un'eccezione (-> log) e fine del problema.
No?
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 15:09   #8
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da guldo76 Guarda i messaggi
OK, facciamo un esempio. Mi devo connettere a un DB che sta su una certa macchina remota. Evito di fare tutti i controlli che magari potrei: connettività alla rete, disponibilità della macchina, stato dell'istanza del DB, etc...
Provo semplicemente a connettermi: se riesco, OK, altrimenti genero un'eccezione (-> log) e fine del problema.
No?
orientativamente si, ma se lavori in Java bada bene che sia un'eccezione checked e comunque (per C++ e C#) preoccupati di catturarla perché stiamo parlando di una condizione d'errore esterna che non puoi controllare.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 15:14   #9
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da guldo76 Guarda i messaggi
Ciao,
mi chiedo se ci siano particolari considerazioni a favore di una strategia rispetto all'altra. Mi riferisco alle alternative:
1) nessun metodo restituisce void; piuttosto si restituisce un booleano e lo si controlla;
2) il metodo restituisce tranquillamente void, ma genera un'eccezione se fallisce.

Cosa ne pensate? Sono sempre indeciso se adottare una strategia o l'altra...
Una strada non esclude necessariamente l'altra.
Io in Java ogni tanto uso una classe che mi permette di scrivere qualcosa tipo:
Codice:
// pseudo-java
final Either<ExpectedResult, AnException> result = myFunction();

if (result.isRight()) {
  // tutto ok qui ...
}
else {
  // oh noooeesss...
}
...
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 15:15   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da 71104 Guarda i messaggi
orientativamente si, ma se lavori in Java bada bene che sia un'eccezione checked e comunque (per C++ e C#) preoccupati di catturarla perché stiamo parlando di una condizione d'errore esterna che non puoi controllare.
Bingo

Non parlerei tuttavia di condizione d'errore. L'errore è infatti un impedimento al raggiungimento dello scopo per causa interna. E' proprio il fatto che il verificarsi della condizione dipenda da un fattore esterno a determinarne la natura di eccezione.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 15:23   #11
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
Quote:
Originariamente inviato da 71104 Guarda i messaggi
orientativamente si, ma se lavori in Java bada bene che sia un'eccezione checked e comunque (per C++ e C#) preoccupati di catturarla perché stiamo parlando di una condizione d'errore esterna che non puoi controllare.
Sì sì, certo. Non mi sono espresso benissimo.
Diciamo che faccio qualcosa del genere (esempio semplificato):
Codice:
static void Connetti(){
    try{
        ...
        ...
        ...
    }catch (Exception ex){
        ScriviLog(ex.Message);
        throw ex;
    }
}

static void Main(){
    try{
        Connetti();
    }catch {
        ScriviLog("bla bla");
    }
}
OK?
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 15:29   #12
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da guldo76 Guarda i messaggi
OK?
Mica tanto... quante volte scrivi nel log? Una volta per ogni rethrow?
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 15:33   #13
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
Quote:
Originariamente inviato da shinya Guarda i messaggi
Mica tanto... quante volte scrivi nel log? Una volta per ogni rethrow?
In linea di massima sì, per capire poi facilmente dal log in quale punto il programma è andato in errore. Cattiva idea? Come sarebbe meglio fare altrimenti?
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 15:36   #14
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da guldo76 Guarda i messaggi
In linea di massima sì, per capire poi facilmente dal log in quale punto il programma è andato in errore. Cattiva idea? Come sarebbe meglio fare altrimenti?
Facilmente? Con la stessa eccezione spalmata su tutto il log? Buona fortuna!

http://today.java.net/pub/a/today/20...ipatterns.html
Guarda qual'è il primo degli anti-pattern
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 15:38   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da guldo76 Guarda i messaggi
Cattiva idea?
*annuisce*


Quote:
Come sarebbe meglio fare altrimenti?
esaminare lo stack trace: il log é qualcosa che viene letta dall'amministratore di sistema, il quale non ha i sorgenti e quindi puó fare poco con gli stack frame. non ti preoccupare di questi dettagli, lo stack trace completo ce l'hai nel crash dump
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 16:04   #16
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
Quote:
Originariamente inviato da shinya Guarda i messaggi
Facilmente? Con la stessa eccezione spalmata su tutto il log? Buona fortuna!

http://today.java.net/pub/a/today/20...ipatterns.html
Guarda qual'è il primo degli anti-pattern


Quote:
Originariamente inviato da 71104 Guarda i messaggi
*annuisce*


esaminare lo stack trace: il log é qualcosa che viene letta dall'amministratore di sistema, il quale non ha i sorgenti e quindi puó fare poco con gli stack frame. non ti preoccupare di questi dettagli, lo stack trace completo ce l'hai nel crash dump
Crash dump?

Quindi mi state dicendo piuttosto è meglio non catturare mai nessuna eccezione se non nel Main, in cui prendo lo stack trace e lo scrivo nel log?
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 18:41   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da guldo76 Guarda i messaggi



Crash dump?

Quindi mi state dicendo piuttosto è meglio non catturare mai nessuna eccezione se non nel Main, in cui prendo lo stack trace e lo scrivo nel log?
lo stack trace non lo devi "prendere" tu: fa parte del crash dump, che viene collezionato automaticamente in un Windows opportunamente configurato quando un programma crasha per essersi lasciato scappare un'eccezione SEH; tutto questo discorso riguarda solamente il C e il C++ e solamente su Windows.

se invece vogliamo parlare di Java la risposta diretta a questo thread é: non ritornare mai valori che indichino condizioni di errore o di successo, usare sempre le eccezioni per indicare condizioni di errore e che siano eccezioni checked per errori causati da fattori esterni (mancaza di connettivitá, files di inizializzazione non trovati, ecc.) e unchecked per bug del tuo programma (riferimenti nulli, index out of bounds, ecc.); per quanto riguarda la cattura delle eccezioni: quelle unchecked lasciale sempre propagare, quelle checked catturale nel punto del programma in cui é appropriato reagire alla condizione d'errore. i crash dump in quella cagata di Java ( ) purtroppo non esistono, in caso di eccezione unchecked lo sviluppatore dovrá accontentarsi dello stack trace che viene stampato automaticamente da Java su System.out quando un'eccezione esce fuori dal main o dal metodo run di un thread.

per quanto riguarda infine C#, vale tutto come Java salvo che:
- non esiste distinzione tra eccezioni checked e unchecked, quindi questa distinzione é affidata a te che devi discernere tra quando catturare un'eccezione nel tuo codice e quando lasciarla andare.
- é possibile collezionare crash dump e caricarli nel debugger, ma purtroppo non ho idea di come si faccia.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 19:06   #18
guldo76
Senior Member
 
L'Avatar di guldo76
 
Iscritto dal: Nov 2002
Città: Morio Cho
Messaggi: 2598
Grazie davvero per l'aiuto

Ma a questo punto mi chiedo:

Supponiamo che io abbia un metodo Main (che non restituisce nulla) che al suo interno chiama un metodo Login (che non restituisce nulla). Supponiamo che la procedura di Login fallisca per problemi di connettività, ma all'interno del metodo io mi occupi di gestire questa eccezione (checked) e scrivere sul log, senza rifare il throw dell'eccezione. A questo punto, il Main che ha richiamato il Login, come viene messo al corrente della situazione?
guldo76 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 21:30   #19
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da 71104 Guarda i messaggi
i crash dump in quella cagata di Java ( ) purtroppo non esistono, in caso di eccezione unchecked lo sviluppatore dovrá accontentarsi dello stack trace che viene stampato automaticamente da Java su System.out quando un'eccezione esce fuori dal main o dal metodo run di un thread.
Hai detto niente.
Quote:
per quanto riguarda infine C#, vale tutto come Java salvo che:
- non esiste distinzione tra eccezioni checked e unchecked, quindi questa distinzione é affidata a te che devi discernere tra quando catturare un'eccezione nel tuo codice e quando lasciarla andare.
- é possibile collezionare crash dump e caricarli nel debugger, ma purtroppo non ho idea di come si faccia.
Piccola nota: sembra che le eccezioni in .NET siano abbastanza lente, paragonate ad altri linguaggi/framework/runtime.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2009, 23:03   #20
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Hai detto niente.
mai visto un crash dump? mai provato a caricarlo in Visual Studio? é come fare il debug del programma al momento del crash: gli stack trace di ogni singolo thread sono il minimo.


Quote:
Piccola nota: sembra che le eccezioni in .NET siano abbastanza lente, paragonate ad altri linguaggi/framework/runtime.
fonti?
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
Rocket Lab ha posticipato il lancio del ...
Dalla missione Artemis IV il razzo spazi...
Una delle sonde europee di ESA Proba-3 h...
Un modder fa girare Linux su PS5: GTA V ...
MacBook Neo: nessuna sorpresa nei primi ...
La serie POCO X8 Pro è pronta al ...
Smartphone: 2026 difficile per il mercat...
Star Wars: Knights of the Old Republic R...
Huang, NVIDIA: OpenClaw ha realizzato in...
Annunciano il recupero di 4,8 milioni di...
Oggi degli ottimi auricolari Sony con ca...
Muffa in casa? Questo deumidificatore da...
Sonos Era 100: il punto d'ingresso per u...
"Non stiamo sostituendo nessuno con...
Tutti i robot in offerta ora: prezzi bas...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:10.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v