Newsgroup: it.comp.lang.visual-basic
Titolo: [!4.1][.NET] VB -> VB.NET senza compatibilità

Questo è un post sperimentale che verrà aggiornato e postato "ogni tanto".
Invito tutti i partecipanti a rispondere a questo post suggerendo o
notificando altre soluzioni di conversione mancanti e/o correggendo le
presenti.
(Ringrazio i partecipanti di it.comp.lang.visual-basic per i loro
suggerimenti)
-----
Cos'è questo post
-----------------
Lo scopo di questo post è quello di indicare come scrivere applicazioni
VB.NET
 senza usare namespaces di retro-compatibilità con le vecchie versioni
di Visual Basic.
Dato per scontato che 
VB.NET
 è un linguaggio completamente differente dai
"vecchi" VisualBasic, è inutile se non dannoso utilizzarlo come se fosse una
sorta di VB7.
Cosa *NON* è questo post
------------------------
Questo post *non* vuole parlare delle nuove funzionalità di [VB].NET.
Quindi non si troveranno sintassi complete dei nuovi costrutti (per quelle
consultate la guida in linea!).
Qui saranno elencate solo le corrispondenze, il più univocamente possibile,
tra VB e 
VB.NET
 in modo da poter essere potenzialmente in grado di
convertire una "vecchia" applicazione VB nella nuova sintassi .NET.
Contenuti del post
------------------
- sfruttare le potenzialità del .NET framework nella sua forma più standard.
- evitare di usare funzioni in compatibilità, retaggio delle precedenti
versioni di VB.
- creare codice più facilmente portabile in altri linguaggi .NET e in altre
piattaforme.
* Premessa operativa
*-------------------
Selezionare il progetto e andare sul menu Progetto -> Proprietà.
Selezionare Proprietà Comuni -> Imports.
Selezionare e rimuovere Microsoft.VisualBasic.
Indice Argomenti Trattati
-------------------------
- Funzioni Stringa
- Funzioni Matematiche
- Funzioni Data-Ora
- Conversione di tipo
- Oggetti/Classi
- Gestion Errori
- Gestione Files
-----
Funzioni stringa
----------------
Hex$(MyNumber)
|
+-- MyNumber.ToString("x")
InStr([...,] MyString, MySubString [,...])
|
+-- MyString.IndexOf(MySubString)                     ' binary compare
+-- MyString.ToLower().IndexOf(MySubString.ToLower()) ' text compare
Len(MyString)
|
+-- MyString.Length
Mid$(MyString,...)
|
+-- MyString.SubString(...)
+-- MyString.Chars(...)
StrComp(MyString1, MyString2 [,...])
|
+-- Text.Compare(MyString1, MyString2)         ' binary compare
+-- Text.Compare(MyString1, MyString2, True)   ' text compare
Funzioni Matematiche
--------------------
Le più comuni si ritrovano sotto il namespace "Math"
Randomize(), Rnd()
|
+-- New Random(...)
Val(MyString)
|
+--
| ' Localized separators
| Double.Parse(MyString)
+--
| ' USA separators
| Double.Parse(MyString, New Globalization.CultureInfo("en-US"))
+--
| ' allow HEX -> DEC
| Int64.Parse(MyString, Globalization.NumberStyles.AllowHexSpecifier)
+---
Funzioni Data-Ora
-----------------
Date()
|
+-- DateTime.Today()
DateSerial(MyYear, MyMonth, MyDay)
|
+-- New DateTime(MyYear, MyMonth, MyDay)
DateAdd(..., MyDate, ...)
|
+-- MyDate.Add(New TimeSpan(...))
+-- MyDate.AddDays(...)
DateDiff(..., MyDate, ...)
|
+-- MyDate.Subtract(...)
+-- MyDate.AddDays(-...)
Day(MyDate)
|
+-- MyDate.Day
Month(MyDate)
|
+-- MyDate.Month
Now()
|
+-- DateTime.Now()
Time()
|
+-- DateTime.Now.TimeOfDay
Year(MyDate)
|
+-- MyDate.Year
Conversione di tipo
-------------------
CBool(MyVar), CInt(MyVar), CStr(MyVar), C*(MyVar), ...
|
+-- Convert.To<System Type>(MyVar)
+-- Convert.ChangeType(MyVar, ...)
Oggetti/Classi
--------------
Collection
|
+-- HashTable
Gestion Errori
--------------
| On Error Goto Exception:
|     ' ...some code...
|     Exit Sub
| Exception:
|     ' ...error handling...
|---
|
+---
| Try
|     ' ...some code...
| Catch ex As Exception
|     ' ...error handling...
| End Try
|---
Err.Raise ...
|
+-- Throw New Exception(...)
Gestione files
--------------
Imports System.IO
| Dim MyFile As Long
| MyFile = FreeFile()
|---
|
+-- Dim MyFile As FileStream
Open MyFileName ... As MyFile
|
+-- MyFile = New File.Open(MyFileName, ...)
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"

 presenti.
Msgbox("Messaggio")
|
+ MessageBox.Show("Messaggio")
IIF
????
INPUTBOX
????
Ciao
P.S.: Ottima iniziativa

[CUT]
---------------------------------------------------
And --> AndAlso
Or --> OrElse
----------------------------------------------------
MsgBox --> System.Windows.Form.MessageBox
----------------------------------------------------
Collection:
Oltre alla HashTable si potrebbero utilizzare
le classi ArrayList, SortedList, Queue e Stack
----------------------------------------------------
--
bye BlackMagic
ICQ#:85485468

 Or --> OrElse
No :)
Gli operatori And ed Or di 
VB.NET
 (come i precedenti vb) valutano _tutte_ le
condizioni, mentre AndAlso e OrElse si interrompono nella catena delle
valutazioni se si hanno gli elementi sufficenti a valutare l'espressione
complessiva.
Provare per credere ;) :
'VB6
------
Dim i As Long
Private Function Cond1() As Boolean
    i = i + 1
    Cond1 = True
End Sub
Private Function Cond2() As Boolean
    i = i + 1
    Cond2 = True
End Sub
Private Sub TestOr()
   i = 0
   If Cond1 Or Cond2 Then
      MsgBox CStr(i) 'i = 2
   End If
End Sub
Sub Main()
    Call TestOr()
End Sub
'
VB.NET
'------
Imports System.Windows.Forms
Module Module1
   Dim i As Integer
   Private Function Cond1() As Boolean
      i += 1
      Return True
   End Function
   Private Function Cond2() As Boolean
      i += 1
      Return True
   End Function
   Private Sub TestOr()
      i = 0
      If Cond1() Or Cond2() Then
         MessageBox.Show(i.ToString) 'i = 2
      End If
   End Sub
   Private Sub TestOrElse()
      i = 0
      If Cond1() OrElse Cond2() Then
         MessageBox.Show(i.ToString) 'i = 1
      End If
   End Sub
   Sub Main()
      TestOr()
      TestOrElse()
   End Sub
End Module
Lokar
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt

 Provare per credere ;) :
[CUT]
lo so che gli operatori AND e OR sono rimasti invariati,
mi sembrava utile suggerire i nuovi costrutti che possono
essere usati al posto di quelli precedenti proprio, come dici tu,
per interrompere la catena delle valutazioni,
se usati in maniera corretta possono sostituire in molti casi
quelli 'vecchi' e permettono di velocizzare le operazioni
di valutazione.


>> Or --> OrElse
Happy Coding =)
