Fortran - Mô-đun
Một mô-đun giống như một gói nơi bạn có thể giữ các chức năng và chương trình con của mình, trong trường hợp bạn đang viết một chương trình rất lớn, hoặc các chức năng hoặc chương trình con của bạn có thể được sử dụng trong nhiều chương trình.
Mô-đun cung cấp cho bạn một cách để tách chương trình của bạn giữa nhiều tệp.
Mô-đun được sử dụng cho -
Đóng gói chương trình con, dữ liệu và khối giao diện.
Xác định dữ liệu toàn cục có thể được sử dụng bởi nhiều hơn một quy trình.
Khai báo các biến có thể được tạo sẵn trong bất kỳ quy trình nào bạn chọn.
Nhập hoàn toàn một mô-đun để sử dụng vào một chương trình hoặc chương trình con khác.
Cú pháp của một mô-đun
Một mô-đun bao gồm hai phần -
- một phần đặc điểm kỹ thuật cho khai báo câu lệnh
- một phần chứa các định nghĩa chương trình con và hàm
Dạng tổng quát của mô-đun là -
module name
[statement declarations]
[contains [subroutine and function definitions] ]
end module [name]
Sử dụng một Mô-đun vào Chương trình của bạn
Bạn có thể kết hợp một mô-đun trong một chương trình hoặc chương trình con bằng câu lệnh sử dụng -
use name
Xin lưu ý rằng
Bạn có thể thêm bao nhiêu mô-đun nếu cần, mỗi mô-đun sẽ nằm trong các tệp riêng biệt và được biên dịch riêng.
Một mô-đun có thể được sử dụng trong nhiều chương trình khác nhau.
Một mô-đun có thể được sử dụng nhiều lần trong cùng một chương trình.
Các biến được khai báo trong phần đặc tả mô-đun, là chung cho mô-đun.
Các biến được khai báo trong một mô-đun trở thành các biến toàn cục trong bất kỳ chương trình hoặc quy trình nào mà mô-đun được sử dụng.
Câu lệnh sử dụng có thể xuất hiện trong chương trình chính hoặc bất kỳ chương trình con hoặc mô-đun nào khác sử dụng các thủ tục hoặc biến được khai báo trong một mô-đun cụ thể.
Thí dụ
Ví dụ sau thể hiện khái niệm -
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
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
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
Khả năng truy cập của các biến và chương trình con trong một mô-đun
Theo mặc định, tất cả các biến và chương trình con trong một mô-đun được cung cấp cho chương trình đang sử dụng mã mô-đun, bằng cách use tuyên bố.
Tuy nhiên, bạn có thể kiểm soát khả năng truy cập của mã mô-đun bằng cách sử dụng private và publicthuộc tính. Khi bạn khai báo một số biến hoặc chương trình con là private, nó không có sẵn bên ngoài mô-đun.
Thí dụ
Ví dụ sau minh họa khái niệm -
Trong ví dụ trước, chúng tôi có hai biến mô-đun, e và pi. Hãy để chúng tôi đặt chúng ở chế độ riêng tư và quan sát đầu ra -
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
Khi bạn biên dịch và thực thi chương trình trên, nó sẽ đưa ra thông báo lỗi sau:
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
Từ e và pi, cả hai đều được khai báo là private, chương trình module_example không thể truy cập các biến này nữa.
Tuy nhiên, các chương trình con của mô-đun khác có thể truy cập chúng -
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
Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
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