Izpostavil bom problem, ki ga je napisal MihaM na svojem blogu (upam, da MihaM ne bo jezen ). Kaj menite, ali se bo prevedlo in če se bo, kaj bo izpisal? Ter zakaj?
Dim a As Integer = 0
Select Case a
Case 0
Console.WriteLine("a")
Case 0
Console.WriteLine("b")
End Select
Console.ReadLine()
Select Case a
Case 0
Console.WriteLine("a")
Case 0
Console.WriteLine("b")
End Select
Console.ReadLine()
Avtor: bojanv, objavljeno na portalu SloDug.si (Arhiv)
MihaM - sreda, 28. februar 2007
pril: No, meni se to sploh ne zdi težava: to je bolj vsebinska kot sintaktična napaka, česar kompajlerji ne bodo nikoli razlikovali...Poskušaj isto narediti v C#. pril: lahko zamenjaš tudi "a" in "b", pa je ravno tako napaka... Če pa se ne šteje za napako, program pravilno izpiše "a", kot bi se izpisalo če se case stavek zamenja z if stavki - kar je tudi njegov namen.To, da se dvakrat isti pogoj z dvema različnima rezultatoma pojavi v kodi je napaka, ki bi jo prevajalnik moral zaznati in vsaj opozoriti. Prevajalnik seveda ne ve, kakšen rezultat hočeš, zato te pa ne more opozoriti, če zamenjaš a in b.
pril - sreda, 28. februar 2007
No, meni se to sploh ne zdi težava: to je bolj vsebinska kot sintaktična napaka, česar kompajlerji ne bodo nikoli razlikovali... lahko zamenjaš tudi "a" in "b", pa je ravno tako napaka... Če pa se ne šteje za napako, program pravilno izpiše "a", kot bi se izpisalo če se case stavek zamenja z if stavki - kar je tudi njegov namen. lp, pl
Samir - ponedeljek, 19. februar 2007
Se prevede! Začuda. To pa zato, ker VB.Net compiler ni tako dosleden do svoje ozr. do CLI, kakor je C#. Kar bi lahko bila promocija, zakaj je bolje programirati v C#. Aja, pa izpiše se " a ".Tukaj je še program pripravljen za copy&paste&compile Module Module1 Sub Main() Dim a As Integer = 0 Select Case a Case 0 Console.WriteLine("a") Case 0 Console.WriteLine("b") End Select Console.ReadLine() End SubEnd Module
MihaM - četrtek, 18. januar 2007
Navedel si vir, ne vem zakaj bi bil jezen, kvečjemu vesel