Допустим, у вас есть модуль Fortran 90, содержащий множество переменных, функций и подпрограмм. Какому соглашению вы следуете в своем заявлении USE
:
- явно объявляйте, какие переменные / функции / подпрограммы вы используете с синтаксисом
, only :
, напримерUSE [module_name], only : variable1, variable2, ...
? - Вставить одеяло
USE [module_name]
?
С одной стороны, предложение only
делает код более подробным. Однако это заставляет вас повторяться в коде, и если ваш модуль содержит множество переменных / функций / подпрограмм, все начинает выглядеть неуправляемым.
Вот пример:
module constants
implicit none
real, parameter :: PI=3.14
real, parameter :: E=2.71828183
integer, parameter :: answer=42
real, parameter :: earthRadiusMeters=6.38e6
end module constants
program test
! Option #1: blanket "use constants"
! use constants
! Option #2: Specify EACH variable you wish to use.
use constants, only : PI,E,answer,earthRadiusMeters
implicit none
write(6,*) "Hello world. Here are some constants:"
write(6,*) PI, &
E, &
answer, &
earthRadiusInMeters
end program test
Обновление. Надеюсь, кто-то скажет что-то вроде «Фортран? Просто перекодируйте его на C #!», чтобы я мог проголосовать против вас.
Обновить
Мне нравится ответ Тима Уиткомба, который сравнивает USE modulename
Фортрана с from modulename import *
Python. Тема, которая раньше была на Stack Overflow:
«импортировать модуль» или «из импорта модуля»
- In an answer, Mark Roddy mentioned:
не используйте 'from module import *'. Для любого разумно большого набора кода, если вы «импортируете *», вы, скорее всего, закрепите его в модуле, и его невозможно будет удалить. Это связано с тем, что трудно определить, какие элементы, используемые в коде, поступают из «модуля», что делает его восточным, чтобы добраться до точки, где, по вашему мнению, вы больше не используете импорт, но в этом чрезвычайно сложно быть уверенным.
- In an answer, Mark Roddy mentioned:
Каковы практические правила импорта Python?
- dbr's answer contains
не делайте из x import * - это затрудняет понимание вашего кода, поскольку вы не можете легко увидеть, откуда появился метод (из x import *; из y import *; my_func () - где определяется my_func?)
- dbr's answer contains
Итак, я склоняюсь к консенсусу явного указания всех элементов, которые я использую в модуле, через
USE modulename, only : var1, var2, ...
И как упоминает Стефано Борини,
[если] у вас настолько большой модуль, что вы чувствуете себя обязанным добавить ТОЛЬКО, это означает, что ваш модуль слишком велик. Раздели это.