Модуль подобен пакету, в котором вы можете хранить свои функции и подпрограммы, если вы пишете очень большую программу или ваши функции или подпрограммы могут использоваться более чем в одной программе.
Модули предоставляют вам способ разделения ваших программ между несколькими файлами.
Модули используются для —
-
Упаковка подпрограмм, блоков данных и интерфейса.
-
Определение глобальных данных, которые могут использоваться более чем одной подпрограммой.
-
Объявление переменных, которые можно сделать доступными в любых подпрограммах по вашему выбору.
-
Полностью импортировать модуль для использования в другую программу или подпрограмму.
Упаковка подпрограмм, блоков данных и интерфейса.
Определение глобальных данных, которые могут использоваться более чем одной подпрограммой.
Объявление переменных, которые можно сделать доступными в любых подпрограммах по вашему выбору.
Полностью импортировать модуль для использования в другую программу или подпрограмму.
Синтаксис модуля
Модуль состоит из двух частей —
- часть спецификации для декларации операторов
- a содержит часть для определения подпрограммы и функции
Общая форма модуля —
module name [statement declarations] [contains [subroutine and function definitions] ] end module [name]
Использование модуля в вашей программе
Вы можете включить модуль в программу или подпрограмму с помощью оператора use —
use name
Обратите внимание, что
-
Вы можете добавить столько модулей, сколько нужно, каждый будет в отдельных файлах и скомпилирован отдельно.
-
Модуль может использоваться в различных программах.
-
Модуль может использоваться много раз в одной и той же программе.
-
Переменные, объявленные в части спецификации модуля, являются глобальными для модуля.
-
Переменные, объявленные в модуле, становятся глобальными переменными в любой программе или подпрограмме, где используется модуль.
-
Оператор использования может появляться в основной программе или в любой другой подпрограмме или модуле, который использует процедуры или переменные, объявленные в определенном модуле.
Вы можете добавить столько модулей, сколько нужно, каждый будет в отдельных файлах и скомпилирован отдельно.
Модуль может использоваться в различных программах.
Модуль может использоваться много раз в одной и той же программе.
Переменные, объявленные в части спецификации модуля, являются глобальными для модуля.
Переменные, объявленные в модуле, становятся глобальными переменными в любой программе или подпрограмме, где используется модуль.
Оператор использования может появляться в основной программе или в любой другой подпрограмме или модуле, который использует процедуры или переменные, объявленные в определенном модуле.
пример
Следующий пример демонстрирует концепцию —
module constants implicit none real, parameter :: pi = 3.1415926536 real, parameter :: e = 2.7182818285 contains subroutine show_consts() print*, "Pi = ", pi print*, "e = ", e end subroutine show_consts end module constants program module_example use constants implicit none real :: x, ePowerx, area, radius x = 2.0 radius = 7.0 ePowerx = e ** x area = pi * radius**2 call show_consts() print*, "e raised to the power of 2.0 = ", ePowerx print*, "Area of a circle with radius 7.0 = ", area end program module_example
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
Pi = 3.14159274 e = 2.71828175 e raised to the power of 2.0 = 7.38905573 Area of a circle with radius 7.0 = 153.938049
Доступность переменных и подпрограмм в модуле
По умолчанию все переменные и подпрограммы в модуле делаются доступными для программы, использующей код модуля, с помощью оператора использования .
Однако вы можете контролировать доступность кода модуля, используя атрибуты private и public . Когда вы объявляете некоторую переменную или подпрограмму как приватную, она недоступна за пределами модуля.
пример
Следующий пример иллюстрирует концепцию —
В предыдущем примере у нас было две переменные модуля, e и pi. Давайте сделаем их приватными и посмотрим на результат —
module constants implicit none real, parameter,private :: pi = 3.1415926536 real, parameter, private :: e = 2.7182818285 contains subroutine show_consts() print*, "Pi = ", pi print*, "e = ", e end subroutine show_consts end module constants program module_example use constants implicit none real :: x, ePowerx, area, radius x = 2.0 radius = 7.0 ePowerx = e ** x area = pi * radius**2 call show_consts() print*, "e raised to the power of 2.0 = ", ePowerx print*, "Area of a circle with radius 7.0 = ", area end program module_example
Когда вы компилируете и запускаете вышеуказанную программу, она выдает следующее сообщение об ошибке —
ePowerx = e ** x 1 Error: Symbol 'e' at (1) has no IMPLICIT type main.f95:19.13: area = pi * radius**2 1 Error: Symbol 'pi' at (1) has no IMPLICIT type
Так как e и pi оба объявлены как private, программа module_example больше не может обращаться к этим переменным.
Однако другие подпрограммы модуля могут получить к ним доступ —
module constants implicit none real, parameter,private :: pi = 3.1415926536 real, parameter, private :: e = 2.7182818285 contains subroutine show_consts() print*, "Pi = ", pi print*, "e = ", e end subroutine show_consts function ePowerx(x)result(ePx) implicit none real::x real::ePx ePx = e ** x end function ePowerx function areaCircle(r)result(a) implicit none real::r real::a a = pi * r**2 end function areaCircle end module constants program module_example use constants implicit none call show_consts() Print*, "e raised to the power of 2.0 = ", ePowerx(2.0) print*, "Area of a circle with radius 7.0 = ", areaCircle(7.0) end program module_example
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —