Visual Basic 코딩 규칙

Microsoft는 이 항목의 지침을 따르는 샘플 및 설명서를 개발합니다. 동일한 코딩 규칙을 따르는 경우 다음과 같은 이점을 얻을 수 있습니다.

  • 독자가 레이아웃이 아닌 콘텐츠에 더 집중할 수 있도록 코드는 일관된 모양을 갖습니다.

  • 독자는 이전 환경을 기반으로 가정할 수 있으므로 코드를 더 빨리 이해합니다.

  • 코드를 더 쉽게 복사, 변경 및 유지 관리할 수 있습니다.

  • 코드가 Visual Basic에 대한 "모범 사례"를 보여 주는지 확인하는 데 도움이 됩니다.

명명 규칙

  • 명명 지침에 대한 자세한 내용은 명명 지침 항목을 참조 하세요.

  • 변수 이름의 일부로 "My" 또는 "my"를 사용하지 마세요. 이 연습에서는 My 개체와 혼동을 만듭니다.

  • 자동 생성된 코드에서 개체의 이름을 지침에 맞게 변경할 필요가 없습니다.

레이아웃 규칙

  • 탭을 공백으로 삽입하고 4개의 공백 들여쓰기를 사용하여 스마트 들여쓰기를 사용합니다.

  • 코드의 Pretty 목록(서식 변경)을 사용하여 코드 편집기에서 코드의 서식을 다시 지정합니다. 자세한 내용은 옵션, 텍스트 편집기, 기본(Visual Basic)을 참조하세요.

  • 문을 한 줄에 하나씩만 사용합니다. Visual Basic 줄 구분 문자(:)를 사용하지 마세요.

  • 언어에서 허용하는 모든 위치에서 암시적 줄 연속을 위해 명시적 줄 연속 문자 "_"을(를) 사용하지 않도록 합니다.

  • 선언을 한 줄에 하나씩만 사용합니다.

  • 코드의 Pretty 목록(서식 변경)이 연속 줄의 서식을 자동으로 지정하지 않는 경우 한 탭 정지에서 연속 줄을 수동으로 들여쓰기합니다. 그러나 목록의 항목은 항상 왼쪽에 맞춥니다.

    a As Integer,  
    b As Integer  
    
  • 메서드 정의와 속성 정의 간에는 빈 줄을 하나 이상 추가합니다.

주석 규칙

  • 코드 줄의 끝에 있는 대신 별도의 줄에 주석을 배치합니다.

  • 대문자로 메모 텍스트를 시작하고 마침표가 있는 메모 텍스트를 종료합니다.

  • 메모 구분 기호(')와 메모 텍스트 사이에 공백을 하나 삽입합니다.

    ' Here is a comment.
    
  • 주석을 서식이 지정된 별표 블록으로 묶지 마세요.

프로그램 구조

  • Main 메서드를 사용하는 경우 새 콘솔 애플리케이션에 대한 기본 구문을 사용하고 명령줄 인수에 My을(를) 사용합니다.

    Sub Main()
      For Each argument As String In My.Application.CommandLineArgs
        ' Add code here to use the string variable.
      Next
    End Sub
    

언어 지침

String 데이터 형식

  • 다음 코드에 나와 있는 것처럼 문자열 보간을 사용하여 짧은 문자열을 연결합니다.

    MsgBox($"hello{vbCrLf}goodbye")
    
  • 루프에 문자열을 추가하려면 StringBuilder 개체를 사용합니다.

    Dim longString As New System.Text.StringBuilder
    For count As Integer = 1 To 1000
      longString.Append(count)
    Next
    

이벤트 처리기의 완화된 대리자

인수(ObjectEventArgs)를 이벤트 처리기에 명시적으로 한정하지 마세요. 이벤트에 전달되는 이벤트 인수(예: sender As Object, e As EventArgs)를 사용하지 않는 경우 완화된 대리자를 사용하고 코드에서 이벤트 인수를 그대로 둡니다.

Public Sub Form1_Load() Handles Form1.Load
End Sub

부호 없는 데이터 형식

  • 필요한 경우를 제외하고 부호 없는 형식 대신 Integer을(를) 사용합니다.

배열

  • 선언 줄에서 배열을 초기화할 때는 간결한 구문을 사용합니다. 예를 들어 다음 구문을 사용합니다.

    Dim letters1 As String() = {"a", "b", "c"}
    

    다음 구문을 사용하지 마세요.

    Dim letters2() As String = New String() {"a", "b", "c"}
    
  • 변수가 아닌 형식에 배열 지정자를 배치합니다. 예를 들어 다음 구문을 사용합니다.

    Dim letters4 As String() = {"a", "b", "c"}
    

    다음 구문을 사용하지 마세요.

    Dim letters3() As String = {"a", "b", "c"}
    
  • 기본 데이터 형식의 배열을 선언하고 초기화할 때 { } 구문을 사용합니다. 예를 들어 다음 구문을 사용합니다.

    Dim letters5 As String() = {"a", "b", "c"}
    

    다음 구문을 사용하지 마세요.

    Dim letters6(2) As String
    letters6(0) = "a"
    letters6(1) = "b"
    letters6(2) = "c"
    

With 키워드 사용

한 개체에 대해 일련의 호출을 수행할 때 With 키워드를 사용하는 것이 좋습니다.

With orderLog
  .Log = "Application"
  .Source = "Application Name"
  .MachineName = "Computer Name"
End With

예외 처리를 사용하는 경우 Try...Catch 및 Using 문 사용

On Error Goto는 사용하지 마세요.

IsNot 키워드 사용

... IsNot Nothing 대신 Not ... Is Nothing를 사용합니다.

New 키워드

  • 짧은 인스턴스화를 사용합니다. 예를 들어 다음 구문을 사용합니다.

    Dim employees As New List(Of String)
    

    앞의 줄은 다음과 같습니다.

    Dim employees2 As List(Of String) = New List(Of String)
    
  • 매개 변수가 없는 생성자 대신 새 개체에 개체 이니셜라이저를 사용합니다.

    Dim orderLog As New EventLog With { 
        .Log = "Application", 
        .Source = "Application Name", 
        .MachineName = "Computer Name"}
    

이벤트 처리

  • AddHandler 대신 Handles 사용합니다.

    Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click
    End Sub
    
  • AddressOf을(를) 사용하고 대리자를 명시적으로 인스턴스화하지 마세요.

    Dim closeItem As New ToolStripMenuItem( 
        "Close", Nothing, AddressOf ToolStripMenuItem1_Click)
    Me.MainMenuStrip.Items.Add(closeItem)
    
  • 이벤트를 정의할 때 짧은 구문을 사용하고 컴파일러에서 대리자를 정의하도록 합니다.

    Public Event SampleEvent As EventHandler(Of SampleEventArgs)
    ' or
    Public Event SampleEvent(ByVal source As Object, 
                              ByVal e As SampleEventArgs)
    
  • RaiseEvent 메서드를 호출하기 전에 이벤트가 Nothing (null)인지 여부를 확인마세요. RaiseEvent은(는) 이벤트를 발생하기 전에 Nothing을(를) 확인합니다.

공유 멤버 사용

인스턴스 변수가 아닌 클래스 이름을 사용하여 Shared 멤버를 호출합니다.

XML 리터럴 사용

XML 리터럴은 XML로 작업할 때 발생하는 가장 일반적인 작업(예: 로드, 쿼리 및 변환)을 간소화합니다. XML을 사용하여 개발하는 경우 다음 지침을 따릅니다.

  • XML 리터럴을 사용하여 XML API를 직접 호출하는 대신 XML 문서 및 조각을 만듭니다.

  • 파일 또는 프로젝트 수준에서 XML 네임스페이스를 가져와 XML 리터럴에 대한 성능 최적화를 활용합니다.

  • XML 축 속성을 사용하여 XML 문서의 요소 및 특성에 액세스합니다.

  • 포함된 식을 사용하여 Add 메서드와 같은 API 호출을 사용하는 대신 값을 포함하고 기존 값에서 XML을 만듭니다.

    Private Function GetHtmlDocument( 
        ByVal items As IEnumerable(Of XElement)) As String
    
      Dim htmlDoc = <html>
                      <body>
                        <table border="0" cellspacing="2">
                          <%= 
                            From item In items 
                            Select <tr>
                                     <td style="width:480">
                                       <%= item.<title>.Value %>
                                     </td>
                                     <td><%= item.<pubDate>.Value %></td>
                                   </tr> 
                          %>
                        </table>
                      </body>
                    </html>
    
      Return htmlDoc.ToString()
    End Function
    

LINQ 쿼리

  • 쿼리 변수에 의미 있는 이름을 사용합니다.

    Dim seattleCustomers = From cust In customers 
                           Where cust.City = "Seattle"
    
  • 파스칼 대/소문자를 사용하여 익명 형식의 속성 이름을 올바르게 대문자로 표시하도록 쿼리의 요소 이름을 제공합니다.

    Dim customerOrders = From customer In customers 
                         Join order In orders 
                           On customer.CustomerID Equals order.CustomerID 
                         Select Customer = customer, Order = order
    
  • 결과의 속성 이름이 모호하면 속성 이름을 바꿉니다. 예를 들어 쿼리에서 고객 이름과 주문 ID를 반환하는 경우 결과를 NameID 그대로 두지 않고 이름을 바꿉니다.

    Dim customerOrders2 = From cust In customers 
                          Join ord In orders
                            On cust.CustomerID Equals ord.CustomerID 
                          Select CustomerName = cust.Name, 
                                 OrderID = ord.ID
    
  • 쿼리 변수 및 범위 변수의 선언에서 형식 유추를 사용합니다.

    Dim customerList = From cust In customers
    
  • From 문 아래에 쿼리 절을 맞춥니다.

    Dim newyorkCustomers = From cust In customers 
                           Where cust.City = "New York" 
                           Select cust.LastName, cust.CompanyName
    
  • Where 절을 다른 쿼리 절 앞에 사용하여, 뒤에 있는 쿼리 절이 필터링된 데이터 집합에서 작동하게 합니다.

    Dim newyorkCustomers2 = From cust In customers 
                            Where cust.City = "New York" 
                            Order By cust.LastName
    
  • Where 절을 사용하여 조인 작업을 암시적으로 정의하는 대신 Join절을 사용하여 조인 작업을 명시적으로 정의합니다.

    Dim customerList2 = From cust In customers 
                        Join order In orders 
                          On cust.CustomerID Equals order.CustomerID 
                        Select cust, order
    

참고 항목