Добавить в корзинуПозвонить
Найти в Дзене

Как в Фортране устроена связь между частями программы

Фортран жив до сих пор, потому что быстр и надёжен. Главное в нём — заставить одну часть программы правильно обращаться к другой. Разберём это на живых примерах без лишних премудростей. Допустим, вы написали правило, которое переводит километры в мили. Вы оформили его в виде отдельного блока — процедуры. Теперь из главной программы вы хотите сказать: «посчитай для 10 км», «посчитай для 25,5 км». Но главная программа должна заранее знать: Это описание и есть интерфейс (связка). Без него Фортран начинает гадать, и часто ошибается. Не делайте так. Это старый опасный стиль. Фортран здесь догадывается сам. Для маленькой программы сработает, но в большой будут ошибки: если передать целое число, а ждали дробное, или перепутать порядок данных. Самый надёжный способ — собрать все описания в модуль. Модуль виден и главной программе, и процедуре. Разберём по строчкам: Если правило нужно только в одной главной программе, можно не делать отдельный модуль. В Фортране есть способ встроить процедуру п
Оглавление

Фортран жив до сих пор, потому что быстр и надёжен. Главное в нём — заставить одну часть программы правильно обращаться к другой. Разберём это на живых примерах без лишних премудростей.

Зачем нужен интерфейс

Допустим, вы написали правило, которое переводит километры в мили. Вы оформили его в виде отдельного блока — процедуры. Теперь из главной программы вы хотите сказать: «посчитай для 10 км», «посчитай для 25,5 км».

Но главная программа должна заранее знать:

  • сколько значений подавать на вход;
  • какого они типа (целые, дробные, текст);
  • что надо выдать в ответ.

Это описание и есть интерфейс (связка). Без него Фортран начинает гадать, и часто ошибается.

Плохой пример (без описания)

Не делайте так. Это старый опасный стиль.

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

Верный способ: помещаем описание в модуль

Самый надёжный способ — собрать все описания в модуль. Модуль виден и главной программе, и процедуре.

-2

Разберём по строчкам:

  • module travel — создали хранилище описаний.
  • interface ... end interface — описание правил вызова (интерфейс).
  • real function to_miles(km) — объявление, что возвращается дробное число.
  • real, intent(in) :: km — значение только входит в правило, обратно не возвращается.
  • use travel — главная программа подключает модуль и всё знает о правиле.

Ещё проще: contains внутри программы

Если правило нужно только в одной главной программе, можно не делать отдельный модуль. В Фортране есть способ встроить процедуру прямо в конец программы, и тогда описание создаётся само.

-3

Слово contains (содержит) говорит: «всё, что дальше, — мои внутренние правила». Компилятор сам строит правильный интерфейс. Ошибка исключена.

Что означают слова в коде

-4

Частая ошибка: забыли «use»

Если вы описали всё в модуле, но в главной программе не написали use travel, Фортран будет предполагать, что модуля нет. Ошибка будет примерно такая:

‘to_miles’ has no implicit type

Перевести можно как: «не знаю, что такое to_miles». Лечится добавлением use travel в самое начало программы.

Главное из статьи

  1. Всегда указывайте компилятору, как вызывать подпрограмму (процедуру или функцию).
  2. Лучший способ — модуль (module) с описанием interface.
  3. Самый простой способ для маленьких программ — contains.
  4. Без описания Фортран ошибается тихо, без предупреждений, и найти ошибку трудно.
  5. Слова intent(in), intent(out) помогают компилятору проверить ваш код.

Теперь вы знаете, как подружить части программы на Фортране. Никакой магии — только чёткие правила, которые делают код надёжным.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.