Ich bin im Grunde ein Java-Shop, aber ich habe beschlossen, für ein bestimmtes Projekt ein Programm auf VB.net zu schreiben. Ich dachte, VB.net sei Bimyo, aber ich dachte, es sei nicht viel anders als Java, also schrieb ich einen Artikel über den Unterschied als Memorandum. Es ist ein sogenanntes Gedicht. Wenn Sie die Möglichkeit haben, ein VB.net-Programmierer in einem Java-Shop zu werden, hoffe ich, dass dies ein wenig hilft.
Ich möchte den Unterschied zu VB.net aus der Sicht eines Java-Shops erklären. Wenn Sie den Code von Anfang an sehen möchten, lesen Sie bitte [3. Beispiel](# 3-Beispiel).
VB.net ist eine objektorientierte Sprache, da sie Teil des .Net Frameworks ist. Leute von VB6 scheinen es seltener zu benutzen, aber Sie können auch "Klasse" auf VB.net definieren. Bei Verwendung wird "neu" verwendet, um ein Objekt zu erstellen.
Beide basieren auf "CamelCase", aber VB.net basiert auch auf "UpperCamelCase" für Methoden und Eigenschaften. In einem Java-Shop ist es auf den ersten Blick schwer, den Unterschied zu "Class" zu erkennen, aber genau das ist es.
VB.net hat auch das Konzept der Verpackung. Schließen Sie es in einen Block namens "Namespace" ein.
Java-Pakete sind an die Verzeichnisstruktur gebunden, aber der Namespace
von VB.net hat nichts mit der Verzeichnisstruktur zu tun.
Wenn Sie die Namen mit dem Namen "Class" und dem Namen "Namespace" verwenden, tritt im Build ein Fehler auf. Java hat ein niedrigeres Paket und der Name der Klasse lautet UpperCamelCase, daher kann es beurteilt werden, aber ich denke, dass VB.net nicht nach derselben Namenskonvention beurteilt werden kann. (vielleicht)
Javas "Import" gibt "Klasse" an (ausgenommen statische Importe), während VB.nets "Importe" "Namespace" angibt.
Es fühlt sich seltsam an, weil Java kein Paket für "Import" angibt. (. * Kann visuell gesehen werden)
Selbst in VB.net geben Sie beim Festlegen eines Alias am Ende die Klasse
an. In diesem Fall ist die Beschreibung jedoch anders, sodass Sie sie visuell sehen können.
In VB.net unterscheidet sich die Methode zum Definieren einer Methode je nach Vorhandensein oder Fehlen eines Rückgabewerts. Wenn es keinen Rückgabewert gibt, dh wenn er in Java "void" ist, wird er als "Sub" (Unterabschnitt) definiert.
Wenn es einen Rückgabewert gibt, definiert VB.net ihn als "Funktion". Wenn Sie das Vorhandensein oder Fehlen des Rückgabewerts ändern möchten, ist VB.net ein bisschen chaotisch.
Bei der Implementierung einer kleinen Utility-Funktion in Java denke ich, dass es sich normalerweise um eine statische Methode handelt. In VB.net ist dies nicht "statisch", sondern "gemeinsam".
VB.net hat auch eine Funktion, die Java-Annotationen entspricht. Das ist das Attribut. Die Grundfunktion besteht darin, Attribute für die Eingabeprüfung bereitzustellen, die fast mit Javas "Bean Validation" identisch sind. Weitere Informationen finden Sie unter Microsoft-Seite.
Ich denke, dass Generika (, Typparameter) eine Funktion sind, die Sie in neuerem Java häufig sehen. Natürlich hat VB.net diese Funktion auch als Sprachspezifikation.
Als Beispiel möchte ich das Gleiche wie die Eingabeprüfung mit Javas "Bean Validation" auf VB.net realisieren. Da ich es auf "Sub" ohne Rückgabewert gesetzt habe, wird die oben erwähnte "Funktion" nicht angezeigt, aber ich habe versucht, alles andere zu packen. Wie bei der Bean-Validierung ist die Überprüfung der Eingabe mithilfe von Attributen einfach, leicht und bequem.
User.vb
Imports System.ComponentModel.DataAnnotations
Namespace Com.Example.Demo
Public Class User
<Display(Name:="Benutzeridentifikation")> _
<Required(ErrorMessage := "{0}Ist ein erforderlicher Eintrag.")> _
Public Property UserId As String
<Display(Name:="Name")> _
<Required(ErrorMessage := "{0}Ist ein erforderlicher Eintrag.")> _
Public Property Name As String
<Display(Name:="Alter")> _
<StringLength(3, MinimumLength :=1 ,ErrorMessage := "{0}Ist{2}Mehr als eine Ziffer{1}Bitte geben Sie innerhalb der Ziffern ein.")> _
Public Property Age As String
End Class
End Namespace
ValidateService.vb
Imports System.ComponentModel.DataAnnotations
Imports System.Collections.Generic
Namespace Com.Example.Demo
Public Class ValidateService
Public Shared Sub Validate(Of T)(target As T)
Dim validationResults As New List(Of ValidationResult)
Dim vc As New ValidationContext(target, Nothing, Nothing)
Dim isValid As Boolean = Validator.TryValidateObject(target, vc, validationResults, true)
If validationResults.Count > 0 Then
Console.WriteLine("Eingabewertprüfung[NG]")
For Each err As ValidationResult IN validationResults
Console.WriteLine("{0} : {1}", err.MemberNames(0), err.ErrorMessage)
Next
Else
Console.WriteLine("Eingabewertprüfung[OK]")
End If
End Sub
End Class
End Namespace
App.vb
Namespace Com.Example.Demo
Public Module App
Public Sub Main()
Console.WriteLine("// ------- Validate 1 -------")
'Eingabedaten
Dim input01 As new User()
'Eingabewertprüfung
ValidateService.Validate(Of User)(input01)
Console.WriteLine("// ------- Validate 2 -------")
'Eingabedaten
Dim input02 As new User()
input02.UserId = "123456"
input02.Name = "TARO TOYOSU"
input02.Age = "1234"
'Eingabewertprüfung
ValidateService.Validate(Of User)(input02)
Console.WriteLine("// ------- Validate 3 -------")
'Eingabedaten
Dim input03 As new User()
input03.UserId = "123456"
input03.Name = "TARO TOYOSU"
input03.Age = "123"
'Eingabewertprüfung
ValidateService.Validate(Of User)(input03)
End Sub
End Module
End Namespace
Java kompiliert mit javac
, während VB.net mit vbc
kompiliert.
Genau wie Java Build-Tools wie Maven und Ant hat, hat VB.net natürlich auch ein Build-Tool namens "MsBuild".
build.bat
@echo off
set DOTNET_HOME=C:\Windows\Microsoft.NET\Framework64\v4.0.30319
set path=%path%;%DOTNET_HOME%
vbc /out:DemoApp.exe /r:System.ComponentModel.DataAnnotations.dll ^
/r:System.ServiceModel.Web.dll ^
App.vb User.vb ValidateService.vb
Ändern Sie die Umgebungsvariable von "DOTNET_HOME" entsprechend Ihrer eigenen Umgebung. Wenn Sie alle Dateien im selben Verzeichnis speichern und "build.bat" ausführen, wird "DemoApp.exe" erstellt.
Ausführungsergebnis
C:\demo>build.bat
Microsoft (R) Visual Basic Compiler version 14.7.2558
for Visual Basic 2012
Copyright (c) Microsoft Corporation. All rights reserved.
This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to Visual Basic 2012, which is no longer the lates
t version. For compilers that support newer versions of the Visual Basic programming language, see http://go.microsoft.com/fwlink/?LinkID=533241
C:\demo>DemoApp.exe
// ------- Validate 1 -------
Eingabewertprüfung[NG]
UserId :Benutzer-ID ist erforderlich.
Name :Der Name ist erforderlich.
// ------- Validate 2 -------
Eingabewertprüfung[NG]
Age :Bitte geben Sie das Alter zwischen 1 und 3 Ziffern ein.
// ------- Validate 3 -------
Eingabewertprüfung[OK]
C:\demo>
Dieses Mal erklärte ich den Unterschied (Teil) zwischen Java und VB.net aus der Perspektive eines Java-Shops. Da VB.net Teil des .Net Frameworks ist, einer objektorientierten Sprache, werden Sie feststellen, dass es sich nicht wesentlich von Java unterscheidet, der gleichen objektorientierten Sprache. C # ist noch näher an Java, aber (leider gibt es immer noch viele Projekte, die VB ** lieben, also hoffe ich, dass es Ihnen hilft, wenn Sie sich für VB.net entscheiden.
Recommended Posts