Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(ebook) Visual Studio .NET Mastering Visual Basic.pdf
Скачиваний:
136
Добавлен:
17.08.2013
Размер:
15.38 Mб
Скачать

 

 

FLOW-CONTROL STATEMENTS

135

Formatting Dates

 

 

 

 

 

 

 

 

To format dates, use the format characters shown in Table 3.8.

 

 

 

 

 

 

 

Table 3.8: Date Formatting Strings

 

 

 

Format Character

Description

Format

d

Short date format

MM/dd/yyyy

D

Long date format

dddd, MMMM dd, yyyy

f

Long date followed by short time

dddd, MMMM dd, yyyy HH:mm

F

Long date followed by long time

dddd, MMMM dd, yyyy HH:mm:ss

g

(General) Short date followed by short time

MM/dd/yyyy HH:mm

G

(General) Short date followed by long time

MM/dd/yyyy HH:mm:ss

m or M

Month/day format

MMMM dd

r or R

RFC1123 pattern

ddd, dd MMM yyyy HH:mm:ssGMT

s

Sortable date/time format

yyyy-MM-dd HH:mm:ss

t

Short time format

HH:mm

T

Long time format

HH:mm:ss

u

Universal date/time

yyyy-MM-dd HH:mm:ss

U

Universal sortable date/time format

dddd, MMMM dd, yyyy HH:mm:ss

Y or y

Year month format

MMMM, yyyy

 

 

 

 

 

If the variable birthDate contains the value #1/1/2000#, the following expressions return the values shown below them, in bold:

Console.WriteLine(birthDate.ToString(“d”))

1/1/2000

Console.WriteLine(birthDate.ToString(“D”))

Saturday, January 01, 2000

Console.WriteLine(birthDate.ToString(“f”))

Saturday, January 01, 2000 12:00 AM

Console.WriteLine(birthDate.ToString(“s”))

2000-01-01T00:00:00

Console.WriteLine(birthDate.ToString(“U”))

Saturday, January 01, 2000 12:00:00 AM

Flow-Control Statements

What makes programming languages flexible—capable of handling every situation and programming challenge with a relatively small set of commands—is the capability to examine external conditions

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

136 Chapter 3 VISUAL BASIC: THE LANGUAGE

and act accordingly. Programs aren’t monolithic sets of commands that carry out the same calculations every time they are executed. Instead, they adjust their behavior depending on the data supplied; on external conditions, such as a mouse click or the existence of a peripheral; or even on abnormal conditions generated by the program itself. For example, a program that calculates averages may work time and again until the user forgets to supply any data. In this case, the program attempts to divide by zero, and it must detect this condition and act accordingly. In effect, the statements discussed in the section are what programs are all about. Without the capability to control the flow of the program, computers would just be bulky calculators. To write programs that react to external events and produce the desired results under all circumstances, you’ll have to use the following statements.

Test Structures

An application needs a built-in capability to test conditions and take a different course of action depending on the outcome of the test. Visual Basic provides three such decision structures:

If…Then

If…Then…Else

Select Case

If…Then

The If…Then statement tests the condition specified; if it’s True, the program executes the statement(s) that follow. The If structure can have a single-line or a multiple-line syntax. To execute one statement conditionally, use the single-line syntax as follows:

If condition Then statement

Visual Basic evaluates the condition, and if it’s True, executes the statement that follows. If the condition is False, the application continues with the statement following the If statement.

You can also execute multiple statements by separating them with colons:

If condition Then statement: statement: statement

Here’s an example of a single-line If statement:

If Month(expDate) > 12 Then expYear = expYear + 1: expMonth = 1

You can break this statement into multiple lines by using End If, as shown here:

If expDate.Month > 12 Then expYear = expYear + 1 expMonth = 1

End If

The Month property of the Date type returns the month of the date to which it’s applied as a numeric value. Some programmers prefer the multiple-line syntax of the If…Then statement, even if it contains a single statement, because the code is easier to read. The block of statements between the Then and End If keywords form the body of the conditional statement, and you can have as many statements in the body as needed.

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

FLOW-CONTROL STATEMENTS 137

If…Then…Else

A variation of the If…Then statement is the If…Then…Else statement, which executes one block of statements if the condition is True and another block of statements if the condition is False. The syntax of the If…Then…Else statement is as follows:

If condition Then statementblock1

Else statementblock2

End If

Visual Basic evaluates the condition; if it’s True, VB executes the first block of statements and then jumps to the statement following the End If statement. If the condition is False, Visual Basic ignores the first block of statements and executes the block following the Else keyword.

Another variation of the If…Then…Else statement uses several conditions, with the ElseIf keyword:

If condition1 Then statementblock1

ElseIf condition2 Then statementblock2 ElseIf condition3 Then statementblock3

Else statementblock4

End If

You can have any number of ElseIf clauses. The conditions are evaluated from the top, and if one of them is True, the corresponding block of statements is executed. The Else clause will be executed if none of the previous expressions are True. Listing 3.10 is an example of an If statement with ElseIf clauses.

Listing 3.10: Multiple ElseIf Statements

score = InputBox(“Enter score”) If score < 50 Then

Result = “Failed” ElseIf score < 75 Then Result = “Pass” ElseIf score < 90 Then

Result = “Very Good” Else

Result = “Excellent” End If

MsgBox Result

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

138 Chapter 3 VISUAL BASIC: THE LANGUAGE

Multiple If…Then Structures vs. ElseIf

Notice that once a True condition is found, Visual Basic executes the associated statements and skips the remaining clauses. It continues executing the program with the statement immediately after End If. All following ElseIf clauses are skipped, and the code runs a bit faster. That’s why you should prefer the complicated structure with ElseIf statements used in Listing 3.10 to this equivalent series of simple If statements:

If score < 50 Then

Result = “Failed”

End If

If score < 75 And score >= 50 Then

Result = “Pass”

End If

If score < 90 And score > =75 Then

Result = “Very Good”

End If

If score >= 90 Then

Result = “Excellent”

End If

Visual Basic will evaluate the conditions of all the If statements, even if the score is less than 50.

You may have noticed that the order of the comparisons is vital in an If…Then structure that uses ElseIf statements. Had you written the previous code segment with the first two conditions switched, like this:

If score < 75 Then

Result = “Pass”

ElseIf score < 50 Then

Result = “Failed”

ElseIf score < 90 Then

Result = “Very Good”

Else

Result = “Excellent”

End If

the results would be quite unexpected. Let’s assume that score is 49. The code would compare the score variable to the value 75. Since 49 is less than 75, it would assign the value “Pass” to the variable Result, and then it would skip the remaining clauses. Thus, a student who made 49 would have passed the test! So be extremely careful and test your code thoroughly if it uses multiple ElseIf clauses.

Select Case

An alternative to the efficient, but difficult-to-read, code of the multiple-ElseIf structure is the Select Case structure, which compares one expression to different values. The advantage of the Select Case statement over multiple If…Then…Else/ElseIf statements is that it makes the code easier to read and maintain.

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

FLOW-CONTROL STATEMENTS 139

The Select Case structure tests a single expression, which is evaluated once at the top of the structure. The result of the test is then compared with several values, and if it matches one of them, the corresponding block of statements is executed. Here’s the syntax of the Select Case statement:

Select Case expression Case value1

statementblock1 Case value2

statementblock2

.

.

.

Case Else statementblockN

End Select

A practical example based on the Select Case statement is Listing 3.11.

Listing 3.11: Using the Select Case Statement

Dim message As String Select Case Now.DayOfWeek

Case DayOfWeek.Monday

message = “Have a nice week” Case DayOfWeek.Friday

message = “Have a nice weekend” Case Else

message = “Welcome back!” End Select

MsgBox(message)

In the listing, the expression variable, which is evaluated at the beginning of the statement, is the weekday, as reported by the DayOfWeek property of the Date type. It’s a numeric value, but its possible settings are the members of the DayOfWeek enumeration, and you can use the names of these members in your code to make it easier to read. The value of this expression is compared with the values that follow each Case keyword. If they match, the block of statements up to the next Case keyword is executed, and then the program skips to the statement following the End Select statement. The block of the Case Else statement is optional and is executed if none of the previous Case values match the expression. The first two Case statements take care of Fridays and Mondays, and the Case Else statement takes care of the weekdays.

Some Case statements can be followed by multiple values, which are separated by commas. Listing 3.12 is a revised version of the previous example.

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

140 Chapter 3 VISUAL BASIC: THE LANGUAGE

Listing 3.12: A Select Case Statement with Multiple Cases per Clause

Select Case Now.DayOfWeek

Case DayOfWeek.Monday

message = “Have a nice week”

Case DayOfWeek.Tuesday, DayOfWeek.Wednesday, _

DayOfWeek.Thursday, DayOfWeek.Friday message = “Welcome back!”

Case DayOfWeek.Friday, DayOfWeek.Saturday, DayOfWeek.Sunday message = “Have a nice weekend!”

End Select MsgBox(message)

Monday, Friday (and weekends), and the remaining weekdays are handled separately by three Case statements. The second Case statement handles multiple values (all weekdays, except for Monday and Friday). Monday is handled by a separate Case statement. This structure doesn’t contain a Case Else statement because all possible values are examined in the Case statements. The DayOfWeek method can’t return another value.

Tip If more than one Case value matches the expression, only the statement block associated with the first matching Case executes.

For comparison, Listing 3.13 contains the equivalent If…Then…Else statements that would implement the example of Listing 3.12.

Listing 3.13: Listing 3.12 Implemented with Nested If Statements

If Now.DayOfWeek = DayOfWeek.Monday Then

message = “Have a nice week”

Else

If Now.DayOfWeek >= DayOfWeek.Tuesday And _

Now.DayOfWeek <= DayOfWeek.Friday Then

message = “Welcome back!”

Else

message = “Have a nice weekend!”

End If

End If

MsgBox(message)

To say the least, this coding is verbose. If you attempt to implement a more elaborate Select Case statement with If…Then…Else statements, the code becomes even more difficult to read.

Of course, the Select Case statement can’t always substitute for an If…Then structure. The Select Case structure only evaluates the expression at the beginning. By contrast, the If…Then…Else structure can evaluate a different expression for each ElseIf statement, not to mention that you can use more complicated expressions with the If clause.

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com