]]> ]]>

VB.NET

Реализация языка программирования Basic

Visual Basic.NET (VB.NET) — объектно-ориентированный язык программирования, который следует рассматривать как развитие Microsoft Visual Basic на платформе .NET. В VB.NET были произведены существенные изменения, которые привели к несовместимости с версиями Visual Basic, что делает автоматический перенос приложений из VB 6.0 в VB.NET по крайней мере очень проблематичным. Открытие проектов старых версий (*.vbp) возможно только после предварительного преобразования их в формат VB.NET специальным мастером (Migration Wizard). Кроме того, и это наиболее существенно, изменилась логика и концепция разработки.

Учитывая запросы со стороны сообщества программистов VB, разработчики VB.NET представили обновленную, гораздо более мощную и гибкую версию, чем все предыдущие. Microsoft включила в VB.NET ряд новых возможностей, в числе которых полная поддержка объектно-ориентированного программирования и расширенные средства разработки web-приложений. Но обнаружилась и оборотная сторона медали. Прежде всего, для освоения обновленного инструмента требуются немалые усилия. Проблема усугубляется еще и тем, что огромная армия VB программистов очень неоднородна по квалификации и характеру решаемых задач. Именно это обусловило раскол VB-сообщества на две части по отношению к новому инструменту.

Большинство разработчиков VB.NET использует Visual Studio .NET как интегрированную среду обработки (IDE).

Связь с VB6 и младшими версиями

Нужно ли рассматривать Visual Basic.NET как новую версию Visual Basic или как совершенно новый язык — тема дебатов. Ответ не так очевиден. Основной синтаксис языка не претерпел сильных изменений, были добавлены различные расширения для поддержки новых особенностей. Были произведены два важных изменения типов данных. По сравнению с VB6 тип Integer был расширен с 16 битов до 32, а тип Long с 32 до 64. Данные изменения присутствуют во всех версиях VB.NET. Старый же целочисленный тип сохранен под именем Short. Редактор графического интерфейса остался практически неизменным. Семантика же языка претерпела значительные изменения.

Изменения затронули множество предположений о «правильных» вещах, для обеспечения производительности и обслуживания. Некоторые функции и библиотеки перестали существовать; другие остались доступны, но не являются эффективными. И даже если старые проекты, написанные на VB6, откомпилируются, он потребует значительных изменений для полного использования преимуществ .NET. нового языка.

Полемика

Большое количество программистов верных Visual Basic жалуются на Visual Basic.NET. Поводом тому служит их несовместимость, уменьшение количества языковых конструкций, особенностей пользовательского интерфейса, изменение семантики. Это привело к тому, что VB.NET стали уничижительно называть Visual Fred или DOTNOT.

Сторонники VB.NET заявляют, что новый язык является более сильным, чем оригинал, включает современную объектно-ориентированную парадигму, что делает программирование более естественным, последовательным и логичным. Противники же настаивают на том, что хотя у VB6 и есть недостатки в объектной модели, усилия по импортированию кода слишком велики по сравнению с преимуществами VB.NET. Независимые разработчики, производящие программное обеспечение для сети Интернет, также остаются на стороне противников.

Microsoft поставляет конвертер VB6-to-VB.NET с Visual Studio .NET, который улучшался в течение долгого времени, но так и не способен корректно преобразовать весь код, и практически все нетривиальные программы после конвертирования нуждаются в ручной доработке. Программы, написанные на Visual Basic, чаще всего являются алгоритмическими по своей природе и могут быть импортированы с небольшими усилиями, однако иначе дело состоит с программами, которые работают с базами данных, графикой, неуправляемыми операциями.

В 2005 компания ArtinSoft, разрабатывавшая конвертер VB6-to-VB.NET, разработала инструмент миграции, названный ArtinSoft Visual Basic Upgrade Companion. Он расширяет возможности конвертора VB6-to-VB.NET и обеспечивает дополнительные возможности. Используя алгоритмы искусственного интеллекта, он может обнаруживать шаблоны кода, которые могут быть реализованы более структурно.

Примеры:

Hello, World!:

Пример для версий VB.NET 9 (2008), vbnc 2.4.2
Module Module1
    Sub Main()
        Console.WriteLine("Hello, World!")
    End Sub
End Module

Факториал:

Пример для версий VB.NET 9 (2008), vbnc 2.4.2

Используется рекурсивное определение факториала.

Module Module1
    Function Factorial(ByVal n As Integer) As Long
        If n = 0 Then
            Return 1
        Else
            Return n * Factorial(n - 1)
        End If
    End Function

    Sub Main()
        For i As Integer = 0 To 16
            Console.WriteLine(i & "! = " & Factorial(i))
        Next
    End Sub
End Module

Числа Фибоначчи:

Пример для версий VB.NET 9 (2008), vbnc 2.4.2

Используется рекурсивное определение чисел Фибоначчи.

Module Module1
    Function Fibonacci(ByVal n As Integer) As Long
        If n < 3 Then
            Return 1
        Else
            Return Fibonacci(n - 1) + Fibonacci(n - 2)
        End If
    End Function

    Sub Main()
        For i As Integer = 1 To 16
            Console.Write(Fibonacci(i) & ", ")
        Next
        Console.WriteLine("...")
    End Sub
End Module

Квадратное уравнение:

Пример для версий VB.NET 9 (2008), vbnc 2.4.2
Module Module1
    Sub Main()
        Dim A, B, C, D As Integer
        Dim p1, p2 As Double
        Try
            Console.Write("A = ")
            A = Val(Console.ReadLine())
            Console.Write("B = ")
            B = Val(Console.ReadLine())
            Console.Write("C = ")
            C = Val(Console.ReadLine())
        Catch ex As Exception
            Console.WriteLine("Invalid input.")
            Return
        End Try
        If A = 0 Then
            Console.WriteLine("Not a quadratic equation.")
            Return
        End If
        D = B * B - 4 * A * C
        p1 = -B / 2.0 / A
        p2 = Math.Sqrt(Math.Abs(D)) / 2.0 / A
        If D = 0 Then
            Console.Write("x = " & p1.ToString())
        ElseIf D > 0 Then
            Console.WriteLine("x1 = " & (p1 + p2).ToString())
            Console.WriteLine("x2 = " & (p1 - p2).ToString())
        Else
            Console.WriteLine("x1 = (" & p1.ToString() & "," & p2.ToString() & ")")
            Console.WriteLine("x2 = (" & p1.ToString() & ",-" & p2.ToString() & ")")
        End If
    End Sub
End Module

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам