Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-12-2012, 19:32   #1
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
[C#] switch annidati

Codice:
switch(calculatorState) {
case CalculatorState.inputVariablesForCalc:
	//	First and Second function only
	if (inThirdFunction)
		return;

	switch (operationMode) {
	case OperationMode.normalMode:
Compiler error: cannot fallthrough.
Lo so che non si può fare il fallthrough se tra due label c'è del codice, ma sono due switch DIVERSI!!!
Non ditemi che devo cambiare gli switch interni con degli IF, non perchè sarebbe una rottura colossale, ma per principio: SONO VARIABILI DIVERSE!
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2012, 20:20   #2
Braccop
Senior Member
 
L'Avatar di Braccop
 
Iscritto dal: Jan 2002
Messaggi: 2690
hai provato a racchiudere il 2° switch dentro a {} ?
__________________
Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders
Braccop è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2012, 23:46   #3
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da Braccop Guarda i messaggi
hai provato a racchiudere il 2° switch dentro a {} ?
Provato adesso, non va -_________-"

P.S.: ho avuto un'illuminazione: ho cannato io! Il problema non è lì, bensì alla fine dei case: non avevo inserito break nonostante dopo non ci fosse più nulla e finisse non solo lo switch ma anche la funzione!!
I break ci vogliono assolutamente, al contrario che in C++ (sto portando codice C++ in C# infatti)...

Ultima modifica di vendettaaaaa : 23-12-2012 alle 23:50.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 11:38   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2783
In realtà il fallthrough è possibile ma va esplicitato con "goto case"
http://msdn.microsoft.com/en-us/library/13940fs2.aspx
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 15:42   #5
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
In realtà il fallthrough è possibile ma va esplicitato con "goto case"
http://msdn.microsoft.com/en-us/library/13940fs2.aspx
Hmm non avevo mai pensato che il goto può riferirsi alle label di uno switch...interessante! Potrebbe permettermi di "lumpare" un bel po' di righe di codice.
E prima che intervenga qualcuno: non me ne fotte niente se il goto è sconsigliato. Basta starci attenti
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 16:32   #6
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ci sono due situazioni in cui il goto è lecito: una è, come nel tuo caso, uscire da cicli e/o switch case annidati; l'altra è per migliorare le prestazioni come spiega Knuth nel suo bell'articolo "Structure Programming with goto Statements".

E se lo consiglia Knuth ci si può fidare

Tratto dall'articolo di cui sopra:

Quote:
Before beginning a more technical discussion. I should confess that the title of this article was chosen primarily to generate attention.
There are doubtless some readers who are convinced that abolition of go to statements is merely a fad. and they may see this title and think, "Aha! Knuth is rehabilitating the go to statement, and we can go back to our old ways of programming again." Another class of readers will see the heretical title and think, "When are diehards like Knuth going to get with it?" I hope that both classes of people will read on and discover that what I am really doing is striving for a reasonably well balanced viewpoint about the proper role of go to statements. I argue for the elimination of go to's in certain cases, and for their introduction in others.

I believe that by presenting such a view I am not in fact disagreeing sharply with Dijkstra's ideas, since he recently wrote the following: "Please don't fall into the trap of believing that I am terribly dogmatical about [the go to statement].
I have the uncomfortable feeling that others are making a religion out of it, as if the conceptual problems of programming could be solved by a single trick, by a simple form of coding discipline!" [29]. In other words, it, seems that fanatical advocates of the New Programming are going overboard in their strict enforcement of morality and purity in programs.

...

Of course I wouldn't bother making such optimizations on a oneshot job, but when it's a question of preparing quality programs, I don't want to restrict myself to tools that deny me such efficiencies.
There is no doubt that the grail of efficiency leads to abuse. Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

...

Now that I have discussed how to remove go to statements, I will turn around and show why there are occasions when I actually wish to insert them into a go to-less program.
The reason is that I like well-documented programs very much, but I dislike inefficient ones; and there are some cases where I simply seem to need go to statements, despite the examples stated above.

Ultima modifica di Vincenzo1968 : 24-12-2012 alle 18:09.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 18:44   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2783
Veramente io sono uno di quelli che "aborra" i goto, però in questo caso il "goto case" di goto ha solo il nome, almeno quando lo usi per passare al case successivo. L'intenzione alla base è quella di evitare a compile time dei case che non finiscono con break per dimenticanza: dovendo esplicitare sia il break che il fallthrough è più difficile fare errori di distrazione.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 19:45   #8
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Pure io lo evito(e, a dire il vero, non m'è mai capitato di doverlo usare). Ma, ci sono situazioni in cui può essere utile. Ti consiglio di procurarti una copia dell'articolo di Knuth, è illuminante in proposito(purtroppo non posso postarlo tutto per ovvi motivi di copyright).

Come dice Knuth, amo i programmi ben documentati e ben formati ma non amo affatto quelli inefficienti. Perché privarsi di uno strumento che può notevolmente migliorare l'efficienza? E dove siamo? nel Congo Belga? (Cit. Totò(nel film "I Tartassati")).
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 19:48   #9
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12919
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Ci sono due situazioni in cui il goto è lecito: una è, come nel tuo caso, uscire da cicli e/o switch case annidati; l'altra è per migliorare le prestazioni come spiega Knuth nel suo bell'articolo "Structure Programming with goto Statements".

E se lo consiglia Knuth ci si può fidare

Tratto dall'articolo di cui sopra:
Aggiungo il terzo, e forse l'unico caso reale in cui può essere utile usare un goto, soprattutto in C: la gestione degli errori e il rilascio delle risorse in seguito ad un errore.

Mettiamo che hai fatto una serie di allocazioni, e si possono verificare più avanti nel codice un paio di errori diversi tra loro, uno non grave, l'altro grave, ma che hanno una serie di parti comuni... in questo caso oltre ad essere utile è consigliabile usare un goto per gestire la parte comune dell'errore.

In questo modo non solo si rende il codice più leggibile ma si evita la replicazione del codice, cosa che potrebbe essere dannosa nel caso in cui si debba effettuare una modifica (ci si può dimenticare di farla in un altro ramo ad esempio).


Questo in C, chiaramente altri linguaggi dispongono di soluzioni ad-hoc, come le eccezioni, per gestire gli errori.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 19:50   #10
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12919
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Pure io lo evito(e, a dire il vero, non m'è mai capitato di doverlo usare). Ma, ci sono situazioni in cui può essere utile. Ti consiglio di procurarti una copia dell'articolo di Knuth, è illuminante in proposito(purtroppo non posso postarlo tutto per ovvi motivi di copyright).

Come dice Knuth, amo i programmi ben documentati e ben formati ma non amo affatto quelli inefficienti. Perché privarsi di uno strumento che può notevolmente migliorare l'efficienza? E dove siamo? nel Congo Belga? (Cit. Totò(nel film "I Tartassati")).
Il goto come metodo per incrementare le prestazioni, al giorno d'oggi, è alquanto deboluccia come tesi, specie per via di tutte le ottimizzazioni che fanno i compilatori.

Chiaramente con tutto il rispetto per Knuth, se il tuo programma ha un problema di prestazioni, vai con un profiler e vedi dov'è il problema, e non è detto che sia l'implementazione, potrebbe benissimo essere l'algoritmo utilizzato ad essere inefficiente.

PS: noto ora che l'articolo è del 1974... direi che è il caso di aggiornarsi un po', dubito fortemente che oggi valgano ancora quelle considerazioni.

Ultima modifica di WarDuck : 24-12-2012 alle 19:55.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 20:17   #11
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Aggiungo il terzo, e forse l'unico caso reale in cui può essere utile usare un goto, soprattutto in C: la gestione degli errori e il rilascio delle risorse in seguito ad un errore.

Mettiamo che hai fatto una serie di allocazioni, e si possono verificare più avanti nel codice un paio di errori diversi tra loro, uno non grave, l'altro grave, ma che hanno una serie di parti comuni... in questo caso oltre ad essere utile è consigliabile usare un goto per gestire la parte comune dell'errore.

In questo modo non solo si rende il codice più leggibile ma si evita la replicazione del codice, cosa che potrebbe essere dannosa nel caso in cui si debba effettuare una modifica (ci si può dimenticare di farla in un altro ramo ad esempio).


Questo in C, chiaramente altri linguaggi dispongono di soluzioni ad-hoc, come le eccezioni, per gestire gli errori.
La gestione degli errori è proprio uno dei casi di cui parla Knuth nel seguito del suo articolo.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 20:23   #12
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Il goto come metodo per incrementare le prestazioni, al giorno d'oggi, è alquanto deboluccia come tesi, specie per via di tutte le ottimizzazioni che fanno i compilatori.

Chiaramente con tutto il rispetto per Knuth, se il tuo programma ha un problema di prestazioni, vai con un profiler e vedi dov'è il problema, e non è detto che sia l'implementazione, potrebbe benissimo essere l'algoritmo utilizzato ad essere inefficiente.

PS: noto ora che l'articolo è del 1974... direi che è il caso di aggiornarsi un po', dubito fortemente che oggi valgano ancora quelle considerazioni.
D'accordissimo ma certe situazioni descritte nell'articolo di Knuth sono valide ancora oggi.
Per esempio, il goto ti consente di evitare la ricorsione nel caso in cui ce ne fosse bisogno(per le prestazioni o per evitare di esaurire lo stack di sistema). Naturalmente è possibile eliminare la ricorsione anche senza goto ma a volte il codice si complica un po' troppo. Un esempio è dato nel Sedgewick che illustra come eliminare la ricorsione dall'algoritmo per l'attraversamento degli alberi binari. Sedgewick prosegue poi mostrando com'è possibile eliminare i goto ed avere un algoritmo non ricosivo. Anche se nell'esempio finale il codice non è molto più complicato rispetto alla versione ricorsiva, il ragionamento da fare per arrivarci è lungo e tortuoso.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2012, 20:55   #13
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Il pdf con l'articolo di Knuth:

http://sbel.wisc.edu/Courses/ME964/L...amming1974.pdf
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2012, 00:39   #14
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Altro gran bell'articolo in cui si spiega in quali casi(pochi, pochissimi) è cosa buona e giusta usare il goto:

by Steven C. McConnell
http://www.stevemcconnell.com/ccgoto.htm
Quote:
Here's a summary of guidelines for using gotos:

Use gotos to emulate structured control constructs in languages that don't support them directly. When you emulate structured constructs, emulate them exactly. Don't abuse the extra flexibility the goto gives you.
Don't use gotos when an equivalent structured construct is available.
Measure the performance of any goto used to improve efficiency. In most cases that use gotos, you can recode them without gotos with improved readability and no loss in efficiency. If your case is the exception, document the efficiency improvement so that gotoless evangelists won't remove it when they see it.
Limit yourself to one goto label per routine, unless you're emulating structured constructs.
Limit yourself to gotos that go forward, not backward, unless you're emulating structured constructs.
Make sure all goto labels are used. They might be a symptom of missing code, namely the code that goes to them. If they're not used, delete them.
Make sure a goto doesn't create unreachable code.
If you're a manager, adopt the perspective that a battle over a single goto isn't worth the loss of the war. If the programmer is aware of the alternatives and is willing to argue, the goto is probably OK.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2012, 11:15   #15
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12919
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
D'accordissimo ma certe situazioni descritte nell'articolo di Knuth sono valide ancora oggi.
Per esempio, il goto ti consente di evitare la ricorsione nel caso in cui ce ne fosse bisogno(per le prestazioni o per evitare di esaurire lo stack di sistema). Naturalmente è possibile eliminare la ricorsione anche senza goto ma a volte il codice si complica un po' troppo. Un esempio è dato nel Sedgewick che illustra come eliminare la ricorsione dall'algoritmo per l'attraversamento degli alberi binari. Sedgewick prosegue poi mostrando com'è possibile eliminare i goto ed avere un algoritmo non ricosivo. Anche se nell'esempio finale il codice non è molto più complicato rispetto alla versione ricorsiva, il ragionamento da fare per arrivarci è lungo e tortuoso.
Rimane un articolo del 1974, e i compilatori ne hanno fatta di strada, quelli più moderni eliminano la tail recursion a compile-time.

L'altro articolo è del 1993.

Ricordo a tutti che siamo all'alba del 2013, per cui già solo un articolo di 5 anni fa può non essere più valido in ambito scientifico, figurarsi uno di 20.

Questo non significa che alcune tesi non siano ancora valide oggi, ma andrebbero dimostrate, specie considerati i progressi nell'ambito dei compilatori.

Ultima modifica di WarDuck : 25-12-2012 alle 11:18.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2012, 21:11   #16
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Rimane un articolo del 1974, e i compilatori ne hanno fatta di strada, quelli più moderni eliminano la tail recursion a compile-time.

L'altro articolo è del 1993.

Ricordo a tutti che siamo all'alba del 2013, per cui già solo un articolo di 5 anni fa può non essere più valido in ambito scientifico, figurarsi uno di 20.

Questo non significa che alcune tesi non siano ancora valide oggi, ma andrebbero dimostrate, specie considerati i progressi nell'ambito dei compilatori.
La tail recursion è facilmente sostituibile con un ciclo while anche a mano. Nel Sedgewich si parla di ricorsione non in coda.

Questo articolo(del 2012) mostra come si può ottenere un incremento di efficienza tramite goto:

http://eli.thegreenplace.net/2012/07...spatch-tables/

Ribadisco comunque che finora, vent'anni che programmo, non m'è mai capitato di dover usare l'istruzione goto. Non sono per l'efficienza a tutti i costi; ma non sono neanche un "gotoless evangelists"
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2012, 21:21   #17
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Volendo si può usare il goto anche nei linguaggi che non lo prevedono:

Java : http://www.steike.com/code/useless/java-goto/
javascript: http://summerofgoto.com/
Python: http://entrian.com/goto/

Codice:
# Example 1: Breaking out from a deeply nested loop:
from goto import goto, label
for i in range(1, 10):
    for j in range(1, 20):
        for k in range(1, 30):
            print i, j, k
            if k == 3:
                goto .end
label .end
print "Finished\n"

Ultima modifica di Vincenzo1968 : 25-12-2012 alle 21:50.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2012, 11:44   #18
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
I sorgenti di Python:

Python 2.7:


Python 3.3:



Però è il colmo: considerano il costrutto goto il male assoluto(tant'è che non lo implementano nel linguaggio) ma non si fanno scrupoli nell'utilizzarlo in CPython per aumentare le prestazioni

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2012, 12:06   #19
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
http://blogs.mathworks.com/steve/200...on-go-to-1974/
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2012, 19:35   #20
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
D'altronde cos'è un blocco try/catch se non un goto camuffato, un eufemismo per saltare da qualche parte senza scrivere la parola "goto"?

Quote:
Other go to-less languages for system programming have similarly introduced other statements which provide "equally powerful" alternative ways to jump. In other words, it seems that there is widespread agreement that go to statements are harmful, yet programmers and language designers still feel the need for some euphemism that "goes to" without saying go to.

Donald E. Knuth
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Bentornati nel 2007: le memorie DDR3 rin...
Stellantis aderisce ad AI4I e Fondazione...
Google Pixel 10a: prime conferme sul pre...
ISRO potrebbe lanciare la capsula Gagany...
Un nuovo leak conferma dimensioni e novi...
Steam Machine: requisiti Verified piu' s...
NVIDIA GeForce RTX 5070 Ti fuori produzi...
Sony ha annunciato i nuovi giochi che en...
IBM Sovereign Core: la sovranità ...
Cerchi un'asciugatrice conveniente su Am...
Ayaneo Pocket Play arriverà in ri...
iPad Pro 11'' con chip M4 scende a 949€ ...
The Sims entra in una nuova era, ma l'ac...
Netflix, Disney o Prime Video: qual &egr...
Perplexity blocca la generazione di imma...
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: 07:37.


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