Visual Basic
Console.WriteLine("Unexpected error: " & ex.Message)
Module Program
Console.WriteLine("Bark")
Properties
Public Overrides Sub Speak()
Типові помилки у Visual Basic-проєктах
Refactoring Visual Basic-коду має змогу включати:
End Sub
{{SEO
Сучасний C# має nullable reference types, але Visual Basic не розвиває новий синтаксис так активно.; * Windows Forms — desktop UI framework для Windows-застосунків.; # Робити code review навіть для legacy changes.; Visual Basic має змогу використовувати Entity Framework або Entity Framework Core для роботи з базами даних.; Function GenerateReport(reportId As Integer) As Byte()
Сьогодні VB6 часто зустрічається в legacy-системах:
Return a + b
Visual Basic 6 або VB6 — класична реліз Visual Basic до переходу на .NET.; # Для VB.NET вмикати Option Strict On.; У legacy VB-системах часто зустрічаються старі технології доступу до даних: ADO, ADO.NET, typed DataSets, Access database, SQL Server.;
Для нових інтеграцій із Microsoft 365 часто краще розглядати Graph API, Power Automate або сучасні add-ins, але VBA досі живе в багатьох компаніях.; Visual Basic особливо корисний для:
Console.WriteLine("Done")
Microsoft documentation має окремий напрям Windows Forms apps для Visual Basic.;
Public Class Dog * фільтрації; * сортування; * групування; * запитів до collections; * Entity Framework; * XML; * data transformations.;<pre> Await Task.Delay(1000) [[Категорія:Тестування]] * невеликих баз даних; * форм; * внутрішніх інструментів; * швидких business apps; * legacy workflows.; Visual Basic є собою однією з трьох мов Microsoft у .NET разом із C# і F#.; * '''ActiveX''' — технологія компонентів, часто пов’язана зі старими VB/COM-рішеннями.; Inheritance треба використовувати обережно.; '''Sub''' не повертає значення: Set(value As String)
Visual Basic підтримує роботу async/await.; * COM — Component Object Model, стара Windows component technology.; Міграція з VB6 на VB.NET або C# має змогу бути складною, бо змінюється runtime, модель об’єктів, бібліотеки й технічна архітектура.;== Office automation ==
- service layer;
- repository/data access layer;
- DTO;
- validation layer;
- logging;
- tests;
- configuration;
- dependency boundaries.;
Implements IReportService.GenerateReport
Приклад: Private _name As String
Generics
Не варто логувати:
Generics потрібні для type-safe collections, services, repositories і reusable code.; Сильні сторони
Logging
- ловити помилки на етапі компіляції;
- уникати випадкових conversion bugs;
- писати type-safe code;
- зробити код ближчим до сучасного .NET-стилю.; Public Sub PrintMessage(message As String)
Приклад:
Console.WriteLine(response)
End Try
Option Explicit
Приклад: |- | Visual Basic || читабельність, legacy VB/VBA-світ, Windows Forms, прості бізнес-застосунки |- | C# || активний еволюція, нові .NET workloads, ASP.NET Core, cloud, modern backend, ширша community |}
Сценарії:
Dim customer As Customer = Nothing
Практична порада: для сучасного VB.NET-коду краще використовувати Option Strict On.; End Module
Dim name As String = "Visual Basic"
Приклади:
Дивіться додатково
Error handling
WinForms підходить для:
<div style="background:#fff7e6;border-left:6px solid #f2994a;padding:14px 18px;margin:16px 0;border-radius:8px;"> Приклад: Option Infer On == Refactoring == End Class Access використовують для: Microsoft Access історично тісно пов’язаний із VBA.; Але в бізнес-коді явні типи часто роблять код зрозумілішим.;<ref>https://learn.microsoft.com/en-us/dotnet/visual-basic/getting-started/strategy</ref> End Sub End If Dim client As New HttpClient() Public Class ReportGenerator Visual Studio застосовується для: '''Visual Basic .NET''' — це Visual Basic для платформи .NET.; Public Function Add(a As Integer, b As Integer) As Integer </div> Для нових .NET-проєктів частіше обирають C#.; Events — важлива частина Visual Basic, особливо для Windows Forms.; End Get Тестування особливо важливе для legacy-систем перед міграцією.; * паролі; * tokens; * персональні інформаційні дані без потреби; * повні фінансові документи без політики.; з цієї причини дисципліна перевірок на Nothing дуже важлива.; Implements IReportService <div style="background:#eef6ff;border-left:6px solid #2f80ed;padding:14px 18px;margin:16px 0;border-radius:8px;"> У desktop apps async сприяє не блокувати UI thread.; Але Visual Basic зазвичай матиме consumption-only підхід і не буде розширюватися на нові workloads.; # Поступово покривати legacy-код тестами.;== Legacy code ==
Public Function GenerateReport(reportId As Integer) As Byte() _
Public Class Animal
Inheritance
Visual Basic підтримує роботу type inference:
* код давно функціонує;
* він важливий для бізнесу;
* його складно змінювати;
* документації має змогу не вистачати;
* автори могли піти;
* тести можуть бути відсутні;
* залежності можуть бути старими.; Поширені помилки:
'''Практичне правило:''' не переписуйте VB-систему тільки з цієї причини, що “VB старий”.; Return New Byte() {}
NuGet робить доступними багато .NET-бібліотек, але потрібно перевіряти сумісність із Visual Basic і конкретним типом проєкту.;
Public Function Add(a As Integer, b As Integer) As Integer
- Visual Basic — мова програмування Microsoft.; Visual Basic підтримує роботу generics.;
У контексті K2 ERP Visual Basic має змогу бути актуальним як: Catch ex As IOException Сценарії:
Visual Basic 6
Dim isActive As Boolean = True
Це сприяє:
Sub Main()
Добра практика:
- Newtonsoft.Json;
- Entity Framework Core;
- Dapper;
- Serilog;
- xUnit;
- NUnit;
- MSTest.; # Перевіряти hardcoded secrets.; Microsoft Learn окремо описує Visual Basic documentation для .NET-розробників.; End Function
- не вмикати Option Strict;
- використовувати On Error Resume Next;
- писати всю логіку у формах;
- не мати tests;
- зберігати SQL у UI event handlers;
- використовувати глобальні змінні без контролю;
- не документувати legacy workflows;
- тримати паролі в коді;
- боятися змінювати legacy-код без тестів;
- переписувати все одразу без плану;
- плутати VBA, VB6 і VB.NET;
- не перевіряти сумісність із сучасним .NET.;== Хороші практики ==
Public Sub Add_ReturnsSum()
Visual Basic історично був популярним з цієї причини, що дозволяв оперативно створювати: Обмеження: Visual Studio Designer надає можливість створювати форми через drag-and-drop.; _name = value
Methods у Visual Basic бувають Sub і Function.; * Event — подія, часто застосовується в UI.; Inherits Animal
<pre> <div style="background:#eef6ff;border-left:6px solid #2f80ed;padding:14px 18px;margin:16px 0;border-radius:8px;"> VB6 був дуже популярним для Windows desktop-застосунків.; Багато Visual Basic-коду є собою legacy code.; End Module Public Property Name As String Visual Basic — важлива мова Microsoft із великою спадщиною в бізнес-застосунках, Windows Forms, Office automation і legacy-системах.;== Синтаксис Visual Basic == == Visual Basic і формування звітів == Public Property Price As Decimal End Interface Visual Basic особливо тісно пов’язаний із Visual Studio, бо історично сила VB була не тільки в мові, а й у drag-and-drop розробці форм.; Public Property Name As String
Visual Basic і COM
Private Sub ButtonSave_Click(sender As Object, e As EventArgs) _ Visual Basic .NET має змогу використовувати стандартні .NET test frameworks: Приклад:
Public Class PdfReportService
Visual Studio — головна IDE для Visual Basic.; * підтримки існуючих VB.NET систем;
- Windows Forms legacy apps;
- Office/VBA automation;
- внутрішніх desktop tools;
- простих бізнес-утиліт;
- підтримки старих процесів;
- міграційних проєктів;
- читання й розуміння старого коду;
- швидких змін у вже існуючому VB-проєкті.; Мова !!; Змінні оголошуються через
Dim.; завдяки наявності Документація .NET 10 зазначає, що Visual Basic compiler тепер інтерпретує й застосовуєunmanagedgeneric constraint, а додатково враховуєOverloadResolutionPriorityAttribute.; * VBScript — стара scripting-мова Windows із VB-подібним синтаксисом.; Для нових .NET-проєктів варто серйозно розглядати C#, але для діючих VB-рішень часто розумніше не переписувати все, а поступово покращувати, тестувати й модернізувати.; * Sub — процедура без значення, що повертається.; Async/await корисний для:
Console.WriteLine(text)
Console.WriteLine(customer.Name)
Security
Where p.Price > 1000
Підхід до legacy VB-коду має бути обережним: спочатку зрозуміти, потім покривати тестами, потім змінювати.;== Visual Basic у .NET 10 ==
Assert.AreEqual(5, result)
Methods
- Excel reports;
- Word documents;
- Outlook automation;
- Access forms;
- data import/export;
- templates;
- macros;
- бухгалтерські таблиці;
- внутрішні офісні процеси.; * Refactoring — покращення структури коду без зміни поведінки.; Він підтримує роботу:
<pre>
'''Module''' — тип, який містить shared functions, procedures або variables.;== Visual Basic і API ==
<TestClass>
{| class="wikitable"
== Коли Visual Basic особливо корисний ==
Visual Basic-проєкти часто мають стару архітектуру:
[[Категорія:VBA]]
* COM components;
* ActiveX controls;
* старі форми;
* database access;
* business logic;
* UI behavior;
* deployment;
* Windows APIs;
* third-party components;
* hidden assumptions;
* відсутність тестів.;<pre>
Public Class CalculatorTests
Головна ідея Visual Basic — зробити програмування більш доступним, читабельним і наближеним до природної мови.; * MSTest;
- NUnit;
- xUnit.; Назва Visual Basic має змогу означати різні речі.;== Міграція з Visual Basic на C# ==
Червоний прапорець: On Error Resume Next має змогу приховати помилки.; Console.WriteLine("Hello, Visual Basic")
У старих Windows-системах Visual Basic часто працював із COM.; # Міграцію робити поетапно.; Visual Basic має змогу бути невдалим вибором, якщо:
Офіційна стратегія Microsoft каже, що Visual Basic залишиться straightforward and approachable language зі stable design.;== Джерела ==
Public Property Id As Integer
Приклад:
- читабельний синтаксис;
- низький поріг входу;
- Visual Studio tooling;
- Windows Forms;
- Office/VBA-спадщина;
- .NET libraries;
- type-safe .NET apps;
- зручність для старих бізнес-процесів;
- багато існуючого legacy-коду.; * Visual Basic підтримується;
- Visual Studio experience для VB продовжує покращуватися;
- VB має змогу використовувати нові .NET APIs;
- новий синтаксис додається обережно;
- нові workloads зазвичай не додаються;
- C# залишається головною мовою для активних нових .NET-напрямів.;
Але нову бізнес-логіку ERP краще будувати в основному технологічному стеку системи, а Visual Basic використовувати там, де це виправдано підтримкою старих процесів.; Це зменшує “магію” й робить поведінку коду передбачуванішою.; * мова має stable design, а не активний інноваційний еволюція;
- нові workloads зазвичай не додаються;
- C# має активнішу ecosystem і community;
- VB6/VBA/VB.NET без зайвих зусиль плутати;
- legacy-код часто має архітектурні й security-проблеми;
- для нових cloud/backend/web-проєктів VB рідко є собою першим вибором.; * LINQ — Language Integrated Query.; це мова програмування Microsoft із довгою історією, яка сьогодні найчастіше означає Visual Basic виступає ключовою рисою Visual Basic.NET або VB.NET — об’єктно-орієнтовану мову для платформи .NET.; End Set
Select p
- Excel;
- Word;
- Access;
- Outlook;
- PowerPoint.; Це покращує сумісність із сучасними runtime APIs і користувачі можуть вибирати кращі overloads.; * Migration — перенесення системи на іншу платформу, мову або архітектуру.;== Events ==
- макросів;
- автоматизації Excel;
- звітів;
- обробки таблиць;
- форм;
- Office workflows.; Dim title = "Report"
Для VB6 часто краще робити поетапну модернізацію:
Компілятор сам визначить, що total — Integer, а title — String.; * Class — клас, характеристика об’єкта.; * End If;
End Sub;End Function;End Class;End Module.;
Міграція COM-залежностей — одна зі складних частин модернізації VB6/VB.NET систем.; Dim text = File.ReadAllText("data.txt")
Потрібно перевіряти об’єкти перед використанням:
Приклад MSTest:
== Designer ==
* старі ERP/CRM-утиліти;
* бухгалтерські програми;
* внутрішні Windows tools;
* ActiveX-компоненти;
* COM-інтеграції;
* старі форми;
* database applications.;<ref>https://learn.microsoft.com/en-us/dotnet/visual-basic/</ref>
COM-інтеграції можуть бути в:
Modules зручні для utility functions, але надмірне використання modules має змогу привести до procedural spaghetti code.;<pre>
</div>
Public Property Name As String
Interfaces корисні для testing, dependency injection і clean architecture.; Але міграція не завжди потрібна.;[[Категорія:Пояснення термінів]]
== NuGet ==
End If
Приклад ідеї:
== Namespaces ==
Приклад:
<pre>
Return a + b
Це означає:
Для важливих production-систем Access/VBA має змогу бути ризиковим через обмеження масштабованості, безпеки й супроводу.;<pre>
Console.WriteLine("Animal sound")
Console.WriteLine("File error: " & ex.Message)
Він не веде обліковий облік сам по собі, не проводить документи й не керує складом без прикладної бізнес-логіки.; Приклад:
Public Property Id As Integer
- UI + business logic в одній формі;
- SQL прямо в event handlers;
- глобальні modules;
- shared mutable state;
- відсутність layers;
- hidden dependencies.;== Interfaces ==
End Property
Option Strict контролює неявні перетворення типів і late binding.; як ілюстрація: Microsoft.VisualBasic namespace містить типи й modules.; * VB.NET — Visual Basic для платформи .NET.; * Option Strict — конфігурація, яке обмежує небезпечні неявні перетворення.; End Class
Для нових інтеграцій краще використовувати сучасний .NET або окремий backend-service.; End Function
Public Class Product Visual Basic не є собою ERP-системою.; * '''Property''' — властивість класу.; # Не переписувати систему без бізнес-причини.; У бізнес-системах це небезпечно: програма має змогу продовжити роботу після збою й пошкодити інформаційні дані або сформувати неправильний результат.; * '''Module''' — тип Visual Basic для shared procedures і helpers.;== Option Infer == # Уточнити, йдеться про VB.NET, VB6 чи VBA.; # Не використовувати <code>On Error Resume Next</code> без крайньої потреби.; * '''Interface''' — контракт для класів.;<ref>https://learn.microsoft.com/en-us/dotnet/visual-basic/</ref> End Class End Sub End Class Properties — стандартний спосіб описати інформаційні дані класу.; * '''Option Infer''' — конфігурація автоматичного виведення типів.; Сьогодні вона важлива насамперед для підтримки існуючих .NET/VB-систем, Windows Forms, Office/VBA-спадщини й бізнес-застосунків, які вже написані на VB.; * HTTP-запитів; * роботи з файлами; * database operations; * UI-застосунків; * background operations.; * '''Option Explicit''' — конфігурація, яке вимагає оголошення змінних.; VBA корисний для: == Async/Await == Generic function: [[Категорія:VB6]] * CRUD; * database-first; * model-first historically; * code-first; * LINQ queries; * migrations; * business data apps.; * '''Legacy code''' — старий, але бізнес-критичний код.; У Visual Basic блоки часто завершуються словами: * legacy desktop utility; * старий інтеграційний компонент; * Office/VBA-звіт; * Windows Forms admin tool; * проміжний інструмент імпорту/експорту; * старий компонент, який треба мігрувати; * автоматизація процесів Excel-звітів; * замовник до API K2 ERP.; Visual Basic-застосунки мають ті самі security-ризики, що й інші бізнес-програми.;
Entity Framework
LINQ корисний для: '''Function''' повертає значення: '''Не плутати:''' якщо користувач системи каже “Visual Basic”, він має змогу мати на увазі VB.NET, VB6 або VBA.;== Visual Basic і .NET libraries == Visual Basic має читабельний синтаксис.; Добре логувати: End Class * System.IO; * System.Net.Http; * System.Text.Json; * System.Data; * System.Threading.Tasks; * Microsoft.VisualBasic namespace; * third-party NuGet packages.;
Сильні сторони:
* VB6 apps;
* Office automation;
* ActiveX controls;
* legacy ERP/CRM;
* desktop components;
* industrial software.; If items.Count = 0 Then
Це сприяє уникати помилок через опечатки в назвах змінних.; # Виносити бізнес-логіку з UI forms.;<div style="background:#f6ffed;border-left:6px solid #27ae60;padding:14px 18px;margin:16px 0;border-radius:8px;">
Але для нової звітності краще розглядати централізований reporting layer, API, BI або web-based reports.; Return Nothing
<pre>
VBA застосовується в Microsoft Office:
End Function
* бізнес-сутностей;
* сервісів;
* DTO;
* forms;
* models;
* data access;
* domain logic.; Переписуйте, якщо є собою зрозуміла бізнес-причина: ризики, супровід, найм, інтеграції, безпека або еволюція.; desktop-застосунків забезпечується через Visual Basic застосовується; додатково реалізовано Windows Forms, внутрішніх бізнес-утиліт, legacy-систем, Office/VBA-спадщини, автоматизації, підтримки старого коду й деяких .NET-застосунків.; Приклад:
Order By p.Name
Офіційна документація Microsoft описує Visual Basic як об’єктно-орієнтовану мову програмування, яка надає можливість оперативно створювати type-safe .NET apps.; MessageBox.Show("Saved")
Приклад:
Ці технології схожі синтаксично, але це не одне й те саме.;
Dim count = 10 Visual Basic дуже часто використовували саме з Windows Forms.; # Додавати logging.;== Variables ==
Приклад:
Потрібно контролювати:
Option Explicit On
Visual Basic/VBA часто використовували для звітності:
Return _name
Добра практика:
У Visual Basic застосовується Nothing.; Public Class Customer
Dim name = "Visual Basic" == Головна ідея == End Class Розробник має змогу: == Visual Basic .NET == VB6 не є собою VB.NET.; Не варто робити великий refactoring без tests і backup.; |- | '''Visual Basic .NET / VB.NET''' || сучасна Visual Basic-мова для .NET |- | '''Visual Basic 6 / VB6''' || класична стара Visual Basic-мова до .NET |- | '''VBA''' || Visual Basic for Applications, мова макросів в Office |- | '''VBScript''' || стара scripting-мова Windows, пов’язана з VB-синтаксисом |} End Sub == Visual Basic і Access == == Коли Visual Basic має змогу бути невдалим вибором == Для [[Звітність K2 ERP|звітності K2 ERP]] Visual Basic має змогу бути доречним, якщо потрібно підтримувати старі Excel/VBA-звіти.;<TestMethod> Під час роботи з Visual Basic варто: У .NET 10 Visual Basic отримав compiler improvements.; Назва !!; * SQL injection; * hardcoded passwords; * слабку авторизацію; * доступ до файлів; * небезпечні COM components; * старі libraries; * macros; * Office automation risks; * insecure connection strings; * відсутність logging; * права користувачів Windows; * outdated runtime.; Handles ButtonSave.Click == Windows Forms == End Namespace End Class <pre> Return items(0) <pre> Dim total = 100 </div> == Visual Studio == Visual Basic .NET має змогу використовувати NuGet packages.; * класи; * об’єкти; * інтерфейси; * generics; * LINQ; * async/await; * events; * properties; * exception handling; * Windows Forms; * .NET libraries; * Visual Studio tooling.; Get Catch ex As Exception == Visual Basic, VB.NET, VB6 і VBA == == Практичний висновок ==
Класи використовуються для:
Legacy означає:
End Function
End Sub
Architecture
Visual Basic і C#
Microsoft зберігає Visual Basic як стабільну й підтримувану мову, але не розвиває її так активно, як C#.; * VBA — Visual Basic for Applications, мова макросів Office.; Потрібно врахувати:
Visual Basic і тестування
Dim count As Integer = 10
- розбиття великих процедур;
- виділення functions;
- заміна глобальних змінних;
- додавання tests;
- увімкнення Option Strict;
- видалення дублювання;
- заміна On Error Resume Next;
- покращення names;
- розділення UI і бізнес-логіки;
- поступова міграція на services;
- заміна старих data access підходів.; # Для нових .NET-проєктів порівнювати VB із C#.; * WinForms — скорочення від Windows Forms.; Dim names As New List(Of String)()
Для підтримки краще поступово вводити:
- VB.NET projects;
- Windows Forms;
- .NET libraries;
- debugging;
- designers;
- IntelliSense;
- refactoring;
- testing;
- NuGet packages;
- Git integration.; {| class="wikitable"
Properties можуть мати custom getter/setter: Public Interface IReportService Для існуючих VB-систем часто логічно підтримувати Visual Basic, якщо переписування не дає бізнес-користі.; Міграція на C# має змогу бути доречною, якщо:
Приклад:
Dim response = Await client.GetStringAsync("https://api.example.com/items")
Стратегія Microsoft щодо Visual Basic
Return "Done"
Namespace Company.Project.Reports
Visual Basic підтримує роботу LINQ.; Коротко: Visual Basic — це мова Microsoft із дуже читабельним синтаксисом.; Legacy не означає “поганий”.; # Документувати критичні сценарії.; Для багатьох сценаріїв interfaces і composition можуть бути кращими.;[2]
Public Async Function LoadDataAsync() As Task(Of String)