2014-10-17 6 views
0

좋아요, 그래서 저는 회사에서 일하고 있습니다. 채용되기 전에는 Visual Basic으로 프로그램을 작성한 사람이있었습니다. 그러나 그는 화가 나서 도망 쳤고 그래서 나는 그와 대화 할 수 없다. 제 직업은 그의 프로그램을 C#으로 변환하는 것입니다. 그는 공식 프로그래밍 교육이 없으므로 코드에 전혀 언급이 없습니다. 자신의 코드에서 그는 (C#으로 작성)에 다음 줄이 있습니다Bool이 정수와 같은지 확인하십시오.

if (boolVariable == 13) 

난 그냥 bool로 또는 그 반대로 할 INT 변환해야 겠지,하지만 내가 먼저 너희들을 요청할 것이라고 상상했다. 자세한 정보를 제공하기 위해 boolVariable은 다른 두 위치에서만 참조됩니다. false로 설정되는 선언 및 true 인 경우 다른 if 문에서 확인합니다. 코드의 다른 부분이 다른 부분에 정의되어 있지 않으므로이 코드는 쓸모없는 코드 일 수 있다고 생각합니다. 그러나이 코드는 Visual Basic에서 오류를 일으키지 않습니다.이 오류는 다소 혼란 스럽습니다. 시각적 기본 기능이 자동으로 변환합니까? 어떤 도움이라도 대단히 감사하겠습니다. 출력과

Imports System 

Public Class Test 
    Public Shared Sub Main() 
     Dim runningVB As Boolean 
     ' Check to see if program is running on Visual Basic engine. 
     If scriptEngine = "VB" Then 
      runningVB = 16 
      If runningVB = True Then 
       Console.WriteLine("True") 
      End If 
      runningVB = 0 
      If runningVB = False Then 
       Console.WriteLine("False") 
      End If 
     End If 
    End Sub 
End Class 

:

True 
False 

그래서, 많은 다른 프로그래밍 언어처럼, 거짓이 될 것입니다

+3

Visual Basic에서 숫자 데이터 형식 값을 Boolean으로 변환하면 0은 False가되고 다른 모든 값은 True가됩니다. – user1274820

+2

왜 13입니까? 왜 안돼? if 문 뒤에있는 논리를 이해하고 바보 같은 숫자는 무시하고 다시 작성하려고합니다. – SimpleVar

+2

boolVariable은 부울입니까? 또는 부울을 반환하기 때문에 boolVariable이라는 int였습니다. – deathismyfriend

답변

4

여기 VB의 전문가 인 척하지만하고는 일 예이다 0이면 true이고 그렇지 않으면 true입니다. C에서이 유형의 검사가 완벽하게 수용 가능하더라도 C# 컴파일러는 아마도 불평 할 것입니다.

0

아마 아래의 샘플 코드는 도움이 될 것입니다 .. ;-)

Option Strict Off ' this code will not compile with (Option Strict On) 
Public Class Form1 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
     Dim boolVariable As Boolean = False 

     boolVariable = -1 ' anything non-zero will set boolean to True 
     Debug.WriteLine(boolVariable) 
     boolVariable = 0 ' zero will set boolean to False 
     Debug.WriteLine(boolVariable) 
    End Sub 
End Class 
+0

어째서 제가 왜 여기로 투표를했는지 알 수 있습니까? – Rose

3

을 예, Visual Basic에서 당신을 위해 그것을 변환합니다. 0은 False으로 변환되고 다른 모든 정수는 True으로 변환됩니다.

게시 한 코드를 '변환'하는 가장 간단한 방법은 '== 13'을 (를) 제거하는 것입니다. 이 이 동일한 것을 수행해야합니다.

if (boolVariable) 
{ 
    // Do stuff 
} 

하지만 실제로 할 수있는 가장 좋은 일이 일어나고 어떤 논리를 이해하는 것입니다 : 어떤 코드가 boolVariabletrue 때 아래 블록에서 실행됩니다

  • ?
  • boolVariable 값의 변화를 유발하는 이벤트는 무엇입니까?
  • boolVariable당신이 이런 일을 이해할 수 있다면, 당신은 변수 좀 더 의미있는 이름을 부여 할 수 있습니다 (그리고 아마도 더 의미있는 정말이 (... 그리고 이름을 변경!) 대표

을 무엇 유형), 코드는 향후 유지 관리가 더 쉬울 것입니다.

나는 당신을 부러워하지 않습니다. 그것은 나쁜 코드를 변환하는 힘든 일입니다. 나의 조언은 : 직접적인 개종을하지 말라. 그렇게하면 다른 언어로 된 주석 처리되지 않은 코드가 손상됩니다. 그리고 1 년 후 우리는 당신이 변환 한 코드에 대해 당신과 같은 또 다른 게시물을 볼 것입니다!:)

나는 상사가 알맞은 전환을 수행하는 데 필요한 노력을 이해하고 사인하는지 확인한 다음, 올바르게하기 위해 추가 시간을 보냅니다.

0

VB 동작 :

If boolVariable = 13 Then // Remeber : it was VB.. 
     // Code block if True 
     // ... 
    Else 
     // Code block if False 
     // ... 
    End If 

지금의 코드가 동작하는 방법을 살펴 보자 :

당신은 내가 원래 코드는 다음과 같습니다 가정, 그것은 VB에서 작성되었습니다했다, 그래서.

(가 VB 또는 C#을이야 어떠했는지) ...

// Remeber : it was VB.. 

    If boolVariable = 13 Then 
    /* The boolVariable is a Boolean 
    The "13" is an Integer 
    First step is performing a Widening conversion Boolean -> Integer 
    boolVariable is converted to 0 if False, or 1 if True. 

    So, depending on the value of boolVariable, the statement is 
    either : */ 
    If 0 = 13 Then // which is False 
    // either : 
    If 1 = 13 Then // which is also False 

    // That means that writing If boolVarialbe = 13 is the same as writing : 
    If False Then 
     // Block of code THAT WILL NEVER BE EXECUTED 
    Else 
     // Block of code that will ALWAYS be executed 
    End If 

그래서 IMHO, 그것을 감지 쓰기 If (boolVariable == 13)가되지 않습니다

마지막 코드에서 아무 것도하지 않는 구체적인 을 테스트 할 때 이상한 일을하고 있습니다.. 어쩌면 이전 프로그래머가 비슷한 것을 만들었고 코드의 해당 부분을 삭제하지 못했을 수도 있습니다. 코드가하는 일과 전반적인 범위에 미치는 영향을 알지 못하면 애플리케이션이 고정되거나 가비지되어야하는 중요한 부분인지 말할 수 없습니다.

어쨌든, If (boolVar == numVar) 같은 그런 문은 이 전 프로그래머는 그것을 쓰기에서 그를 막았을 것이다 Option Strict을 활성화하는 데 실패 프로그래밍 (IMHO)의 오늘의 방법으로을 더 - 이동하지 않습니다.

관련 문제