Просмотров-831
0

Процедурное программирование на языке Crystal

Процедурное программирование на языке Crystal

Ранее в статье Что такое программирование? мы писали, что процесс создания программы в основном определяется теми закономерностями, которые концентрируются в понятиях виды и парадигмы программирования. В частности в статье Что такое процедурное программирование? показаны основные этапы и действия по созданию программы, составными элементами которой являются процедуры и функции.

Процедуры и функции в программах на языке Crystal

Не смотря на то, что язык программирования Crystal является строго объектно-ориентированным, процедурное программирование на алгоритмическом языке Crystal возможно и даже иногда необходимо. Процедуры и функции объектно-ориентированного языка программирования Crystal дают возможность применения в процедурном программировании. В данной статье показано как это делать на алгоритмическом языке программирования Crystal.

 В соответствие с методикой итерационного и инкрементного подхода изучения языков программирования на первом цикле обучения методам процедурного программирования начинать  надо после изучения простых типов данных языка Crystal и освоения его операторов и управляющих конструкций переходить к освоению создания и использования функций и процедур.

Процедурное программирование на алгоритмическом языке, в том числе и Crystal, базируется на таких понятиях как процедура и функция. В алгоритмическом языке программирования Crystal используются собственные методы(процедуры и функции), а также библиотечные методы(функции).

В любом случае процедуры и функции это обособленные фрагменты кода, позволяющие группировать код так, чтобы иметь возможность вызывать их(фрагментов) многократно по присвоенным ранее им именам в любой части программы.

Для освоения работы с методами и процедурами необходимо знать способы:

  • объявления методов, функций и процедур;
  • объявления формальных и передачи фактических аргументов;
  • возврата  значений.

В соответствие с методологией процедурного(структурного) программирования на алгоритмическом языке любую программу можно создать как совокупность взаимодействующих процедур и функций. Поэтому процедурное программирование на алгоритмическом языке Crystal возможно, не смотря на его прочный объектно-ориентированных фундамент, и даже иногда необходимо. В этом основными помощниками являются процедуры и функции языка.

Методы и функции

Собственные методы объявляются в программе, используя синтаксис ключевых слов «def» и «end». Формальные аргументы указываются в скобках после имени, тип возвращаемого значения указывается после круглых скобок.

При вызове метода надо записать его имя и предоставить один или несколько фактических аргументов, которые служат для передачи и последующей обработки методом информации.

Например, метод вычисления факториала имеет вид.

  1.    def fact(n : Int) : Int
  2.       if n < 0
  3.                 puts «n должен быть положительным»
  4.                 exit
  5.       end
  6.                  n == 0 ? 1 : n * fact(n — 1)
  7.    end

Метод имеет имя, в данном случае fact, один или несколько формальных аргументов, которые перечисляются в скобках после имени метода с указанием типа, а также тип возвращаемого значения, показывается после скобок.

Формальные аргументы воспринимаются как переменные, существующие в области действия метода.

Метод возвращает значение своего последнего выражения, которое присваивается его имени. Однако код может иметь оператор явной передачи  «returns n», но это не обязательно. Если необходимо вернуть несколько значений, их можно упаковать в кортеж или массив.

Хорошо спроектированные методы должны содержать не только задаваемые вычисления, но и проверку возможных исключительных ситуаций. Например, в данном методе кроме вычисления факториала по рекуррентной формуле(функции) предусмотрены проверки на положительность аргумента и блокировка передачи строкового аргумента уже на стадии компиляции с четким сообщением о несовпадении типов аргумента и параметра.

Примечание. Метод в языке Crystal может вызвать сам себя, как в методе вычисления факториала целого числа «fact». Такие методы называются рекурсивными.

Другим примером метода или функции в языке Crystal рассмотрим метод вычисления чисел Фибоначчи, представленный ниже.

            # Способы создания и применения функций

  1.             def fib(n)  
  2.             return n if n <= 1
  3.             fib(n — 1) + fib(n — 2)
  4.             end
  5.               sum = 0
  6.               i=0
  7.             while i<3
  8.               sum += fib(i)
  9.                 i+=1
  10.             end
  11.             puts «Суммирование чисел Фибоначчи», sum

Внимание. В следующем фрагменте только аргумент «y» объявляется, как принадлежащий типу Int, но не «x»:

def add(x, y : Int)

   x + y

   end

Вызов функции  

   add 3, 4     # 7

   add 2.14, 7       # 9.14

Во втором вызове метода add параметр «x» не соответствует типу Int. Если «x» и «y» оба должны соответствовать типу Int, то надо определить метод так: add (x: Int, y: Int).

Таким образом, процедурное программирование на алгоритмическом языке Crystal базируется на его собственных методах(функциях), взаимодействие которых будет рассмотрено далее. Это позволяет полагать, что процедурное программирование на алгоритмическом языке Crystal возможно, не смотря на его прочный объектно-ориентированных фундамент.

Процедуры языка Crystal

Процедуры алгоритмического языка программирования Crystal  позволяют поместить логику, включая методы, внутрь схожих с переменными структур, которые можно пропускать сквозь программу и вызывать напрямую или через ключевое слово «yield» (выдача).

Подобно методам(def), процедуры (Procs) могут принимать аргументы и возвращать значения.

В алгоритмическом языке программирования Crystal применяются следующие виды  процедур. Захваченный блок кода (&block) с помощью фигурных скобок { } фактически является объектом, называемым процедурой («Proc»), или лямбда-функцией, или анонимной функцией.

Процедуры можно создавать с помощью нескольких различных подходов:

1)Двухсимвольная запись «->» позволяет создать литерал процедуры. Например, процедура сложения двух чисел add имеет вид:

   fn = ->(n : Int32, m : Int32)

   { n + m }

Имя процедуры находится слева от знака «=». Затем оператор «->» указывает список параметров с обязательным  указанием типов. Дальше следует фрагмент кода между фигурных скобок {}. Во второй строке компилятор делает вывод относительно числового типа, возвращаемого процедурой.

Обращение к процедуре «Proc» осуществляется как к функциональному объекту с методом «call».

   fn.call(42, 108)    # => 150

2) Можно создать процедуру из существующего метода «add», используя аналогичную запись:

Например, имеем метод.

   def add(n, m)

   n + m

   end

На его основе создаем процедуру.

   fn = ->add(Int32, Int32)

Обращение к процедуре в программе.

   fn.call(42, 108) # => 150

3) Тот факт, что Proc является классом в стандартной библиотеке Кристалла, позволяет вам также использовать метод new:

   fn = Proc(Int32, Int32, Int32).new { |n, m| n + m }

   fn.call(42, 108) # => 150

Процедурное программирование на алгоритмическом языке Crystal можно реализовать с помощью процедур. Однако здесь без объектно-ориентированных приемов не обойтись.

Библиотечные методы

Как и любой язык программирования Crystal имеет несколько библиотек, в которых определены множество методов. Среди которых: ввод со стандартного ввода(клавиатуры) gets, чтение строки стандартного ввода read_line, вывод на стандартный вывод(экран) puts, печать любого объекта ‘p’ и т.д.

Некоторые примеры прменения библиотечных функций. Ввод с клавиатуры целых чисел с печатью введенного массива..

  1. while  n = gets
  2.    arr << n.to_i8
  3. p arr    # => для примера: [2, 3, 3, 5]
  4. end

Методы «pp» и «inspect» полезны для отладки программ;

Методы printf и sprintf принимает строку в формате, свойственном языку программирования C; последний вариант (sprintf) возвращает тип String.

Видимость переменных в методах

В алгоритмическом языке программирования Crystal применяются следующие правила видимости переменных в программах. Переменные, определяемые локально в методе, не будут видны вне метода, а  переменные, которые  определены вне метода, не будут видимы  внутри этого метода тоже. Таким образом процедуры и функции выступают в роли контейнеров инкапсулирующих некоторые переменные(данные).

Таким образом, эта статья заканчивает первый цикл изучения языка программирования Crystal согласно итерационному и инкрементному подходу. Следующий цикл также начинается с изучения типов данных, но уже более сложных, так называемых, структурированных типов данных.

Заключение

Процедуры и функции объектно-ориентированного языка программирования Crystal дают возможность реализовать процедурное программирование.

Процедурное программирование на алгоритмическом языке Crystal дает возможность создания программы в виде совокупность взаимосвязанных процедур и функций.

Не смотря на прочный объектно-ориентированных фундамент языка Crystal, процедурное программирование не только возможно, но и иногда необходимо.

С этой целью лучше использовать собственные методы(def) языка Crystal.

Статьи по теме

Изучение управляющих
конструкций языка
программирования Crystal
Изучение языка программирования Crysal Управляющие конструкции Простые типы данных
языка программирования
Crystal
Язык программирования Crystal
Структурированные
типы данных языка
программирования Crystal
Структурированные типы данных Объектно — ориентированное
программирование на языке Crystal
Объектно ориентированное программирование

Внимание! Кто хочет своевременно узнавать о выходе новой статьи на сайте должен подписаться.

ПОДПИСКА НА РАССЫЛКУ

Статьи об онлайн курсах обучения

Дистанционное обучение
Обучение программированию
Проектирование информационных систем
 
Реклама. Информация о рекламодателе по ссылкам в статье.

brasm

Пенсионер с 33 - летним педагогическим стажем

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *