Програмування інтервалів за допомогою оператора ElseIf

У цьому завданні ми маємо намір зіграти роль як би касира в супермаркеті, і якщо наш черговий покупець купив товарів на суму до 10 умовних грошових одиниць, то йому призначаємо знижку 10%, для суми від 10 до 20 одиниць належить знижка 20%. А при покупці на суму понад 20 одиниць покупцеві надається знижка 30%. Таким чином, в цьому завданні ми повинні програмувати наступні чотири інтервали:

Сума ≤ 0 → вихід;

0 <сума ≤ 10 → знижка = 10%;

10 <сума ≤ 20 → знижка = 20%;

сума> 20 → знижка = 30%.

Як оптимально вирішувати подібні завдання? Можна скористатися традиційною умовою If - Else, але при цьому програма буде виглядати дуже заплутано (такий заплутаний клубок умов називають "спагетті"). Ми витратимо багато зусиль на налагодження цього "спагетті", а коли буде потрібно модернізувати дану ділянку програми (наприклад, додати ще один інтервал), нам знову доведеться вирішувати черговий ребус. Хорошим виходом з цієї ситуації є використання оператора множинного вибору Select Case. Таке рішення цілком забезпечить наочність і зрозумілість програми. Зауважимо,  що зрозумілість написаної програми має сьогодні набагато більший пріоритет, ніж швидкість її роботи.

Тим часом, не всі так однозначно, - застосування оператора Select Case вважається вельми банальним, є більш красиве рішення задачі програмування інтервалів. Приблизно з 2002 року, тобто з моменту появи Visual Basic .NET, ми можемо вирішувати цю задачу за допомогою операторів ElseIf, які вбудовують в конструкції If - Else. Оператор ElseIf забезпечує наочність, виразність і ефективність програмування!

Отже, запустимо Visual Studio, створимо новий проект, в пункті Visual Basic виберемо шаблон Console Application, задамо ім'я рішення: Інтервали. На вкладці програмного коду введемо програмний код, представлений в лістингу.

Module Module1

    ' Програмуємо інтервали

    Sub Main()

        ' Задаємо заголовок консолі:

        Console.Title = "Програмування iнтервалiв"

        Console.BackgroundColor = ConsoleColor.Cyan ' — колір фону

        Console.ForegroundColor = ConsoleColor.Black ' — колір тексту

        Console.Clear()

        Console.WriteLine("Введiть суму за придбанi товари:")

        Dim Сума, Знижка As Single

        Do ' або - нескінченний цикл

            ' Отримуємо значення чергової суми від користувача:

            Dim Рядок = Console.ReadLine()

            ' Перетворюємо рядок в чмсло:

            Сума = Single.Parse(Рядок)

            If (0 < Сума And Сума <= 10) Then

                ' Другий інтервал 0 < Сума <= 10

                Знижка = 10 ' 10%

            ElseIf (10 < Сума And Сума <= 20) Then

                ' Третій інтервал 10 < Сума <= 20

                Знижка = 20 ' 20%

            ElseIf (Сума > 20) Then

                ' Четвертий інтервал Сума > 20

                Знижка = 30 ' 30%

            Else

                ' Перший інтервал Сума <= 0

                ' Цін <= 0 не існує, тому виходимо з циклу:

                Console.WriteLine(

                "Сума = {0}, тому - вихiд з програми", Сума)

                Console.ReadKey()

                Exit Do

            End If

            Console.WriteLine(

            "Сума = {0}, тому знижка = {1}%", Сума, Знижка)

        Loop ' Кінець тіла безкінечного циклу

    End Sub

End Module

І зовсім не для "красного слівця" ми тільки що сказали, що оператори ElseIf забезпечують ефективний програмний код. Справа в тому, що програмування множинного вибору забезпечує найбільшу швидкість виконання написаного програмного коду саме при використанні операторів ElseIf. На рис. 1 наведено приклад роботи обговорюваної програми.

Рис.1. Вибір інтервалу за допомогою ElseIf