我正在为我的学校课程构建一个计算项目,我有一个相当大的if语句。当我运行这个程序时,它一点也不慢,但我只是想知道,编写大型if语句是否被认为是不好的。
For BookingNumber = 0 To intBookingCount - 1
If intStartPeriod(BookingNumber) = 1 And strComputerRoom(BookingNumber) = strCR Then
radRadioButton1.Enabled = False
If intLength(BookingNumber) = 1 Then
ElseIf intLength(BookingNumber) = 2 Then
radRadioButton2.Enabled = False
ElseIf intLength(BookingNumber) = 3 Then
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
ElseIf intLength(BookingNumber) = 4 Then
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
ElseIf intLength(BookingNumber) = 5 Then
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
ElseIf intLength(BookingNumber) = 6 Then
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
ElseIf intLength(BookingNumber) = 7 Then
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
radRadioButton7.Enabled = False
End If
ElseIf intStartPeriod(BookingNumber) = 2 And strComputerRoom(BookingNumber) = strCR Then
radRadioButton2.Enabled = False
If intLength(BookingNumber) = 2 Then
radRadioButton3.Enabled = False
ElseIf intLength(BookingNumber) = 3 Then
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
ElseIf intLength(BookingNumber) = 4 Then
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
ElseIf intLength(BookingNumber) = 5 Then
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
ElseIf intLength(BookingNumber) = 6 Then
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
radRadioButton7.Enabled = False
End If
ElseIf intStartPeriod(BookingNumber) = 3 And strComputerRoom(BookingNumber) = strCR Then
radRadioButton3.Enabled = False
If intLength(BookingNumber) = 2 Then
radRadioButton4.Enabled = False
ElseIf intLength(BookingNumber) = 3 Then
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
ElseIf intLength(BookingNumber) = 4 Then
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
ElseIf intLength(BookingNumber) = 5 Then
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
radRadioButton7.Enabled = False
End If
ElseIf intStartPeriod(BookingNumber) = 4 And strComputerRoom(BookingNumber) = strCR Then
radRadioButton4.Enabled = False
If intLength(BookingNumber) = 2 Then
radRadioButton5.Enabled = False
ElseIf intLength(BookingNumber) = 3 Then
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
ElseIf intLength(BookingNumber) = 4 Then
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
radRadioButton7.Enabled = False
End If
ElseIf intStartPeriod(BookingNumber) = 5 And strComputerRoom(BookingNumber) = strCR Then
radRadioButton5.Enabled = False
If intLength(BookingNumber) = 2 Then
radRadioButton6.Enabled = False
ElseIf intLength(BookingNumber) = 3 Then
radRadioButton6.Enabled = False
radRadioButton7.Enabled = False
End If
ElseIf intStartPeriod(BookingNumber) = 6 And strComputerRoom(BookingNumber) = strCR Then
radRadioButton6.Enabled = False
If intLength(BookingNumber) = 2 Then
radRadioButton7.Enabled = False
End If
ElseIf intStartPeriod(BookingNumber) = 7 And strComputerRoom(BookingNumber) = strCR Then
radRadioButton7.Enabled = False
End If
Next
Next
End Function发布于 2013-03-21 05:41:43
更新
我收回它,你可以用下面的代码替换你的代码的所有:
For BookingNumber = 0 To intBookingCount - 1
If intStartPeriod(BookingNumber) = 1 Then radRadioButton1.Enabled = False
If intStartPeriod(BookingNumber) = 2 Then radRadioButton2.Enabled = False
If intStartPeriod(BookingNumber) = 3 Then radRadioButton3.Enabled = False
If intStartPeriod(BookingNumber) = 4 Then radRadioButton4.Enabled = False
If intStartPeriod(BookingNumber) = 5 Then radRadioButton5.Enabled = False
If intStartPeriod(BookingNumber) = 6 Then radRadioButton6.Enabled = False
If intStartPeriod(BookingNumber) = 7 Then radRadioButton7.Enabled = False
Dim total = intStartPeriod(BookingNumber) + intLength(BookingNumber)
If total >= 3 Then radRadioButton2.Enabled = False
If total >= 4 Then radRadioButton3.Enabled = False
If total >= 5 Then radRadioButton4.Enabled = False
If total >= 6 Then radRadioButton5.Enabled = False
If total >= 7 Then radRadioButton6.Enabled = False
If total >= 8 Then radRadioButton7.Enabled = False
Next大量的if块是非常不受欢迎的。总而言之,如果可能的话,最好把它们排除在外。例如,您通常会看到类似以下内容的内容
Sub DoStuff()
If conditionA Then
DoSomeStuff()
If conditionB Then
DoMoreStuff()
End If
End If
End Sub这可以重构为:
Sub DoStuff()
If Not conditionA Then Return
DoSomeStuff()
If Not conditionB Then Return
DoMoreStuff()
End Sub不久前,我问了一个类似的(不一样的)问题,得到了这个非常有用的答案:
https://softwareengineering.stackexchange.com/a/174977/57863
链接到:
https://softwareengineering.stackexchange.com/a/172910/57863
在重构的主题上提供了一些很好的链接。
发布于 2013-03-21 03:56:19
这很难阅读,但适当的缩进可以缓解这种情况。这也可能是你的代码需要一些重构的标志。举个例子,非常长的if语句可以这样写:
if (condition == A && condition == C
&& (someCondition >= 1000 || someOtherCondition != C)
|| someThirdCondition == D) {
...
}此外,一定要利用短路的布尔语句,并将最容易计算的表达式放在第一位。
发布于 2013-03-21 04:46:44
For BookingNumber = 0 To intBookingCount - 1
bookingNumberLength = intLength(BookingNumber)
If strComputerRoom(BookingNumber) = strCR then
Select Case intStartPeriod(BookingNumber)
Case 1
radRadioButton1.Enabled = False
Select Case bookingNumberLength
Case 2
radRadioButton2.Enabled = False
Case 3
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
Case 4
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
Case 5
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
Case 6
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
Case 7
radRadioButton2.Enabled = False
radRadioButton3.Enabled = False
radRadioButton4.Enabled = False
radRadioButton5.Enabled = False
radRadioButton6.Enabled = False
radRadioButton7.Enabled = False
End Select
Case 2
Case 3
Case 4
Case 5
Case 6
radRadioButton6.Enabled = False
If intLength(BookingNumber) = 2 Then
radRadioButton7.Enabled = False
End If
Case 7
radRadioButton7.Enabled = False
End Select
End If
Next当您这样做时,除非strComputerRoom(BookingNumber) = strCR,否则您的代码不会做任何事情。
这看起来不是什么大事,但如果你开始像这样切掉一些东西,你就会得到真正的东西。
笔记可能已经填满了VB,因为我是一个C#男孩,我将让你填写它的其余部分……我会把那些单选按钮放在一个数组中,然后就会有一个问题,那就是改变所有的if和like,然后想出一些东西,比如循环的开始和结束,然后在你暂停它们之后。
For rb = rbStart To rbEnd
MyButtons[rb].Enabled = False
Next看着它,你可以从几行数学开始计算出来。可能会挑战你的老师,我不知道你还差多远。当你在大约五行代码中给出这一点时,他们可能会怀疑,如果我为你做,你就不会学习鼻塞。
程序员规则#21 -我们不喜欢做太多的打字工作。
https://stackoverflow.com/questions/15533378
复制相似问题