Fortran - โมดูล
โมดูลเปรียบเสมือนแพ็กเกจที่คุณสามารถเก็บฟังก์ชันและรูทีนย่อยของคุณไว้ได้ในกรณีที่คุณเขียนโปรแกรมขนาดใหญ่มากหรือฟังก์ชันหรือรูทีนย่อยของคุณสามารถใช้ในโปรแกรมได้มากกว่าหนึ่งโปรแกรม
โมดูลช่วยให้คุณสามารถแยกโปรแกรมของคุณระหว่างไฟล์ต่างๆ
โมดูลใช้สำหรับ -
โปรแกรมย่อยบรรจุภัณฑ์ข้อมูลและบล็อกอินเทอร์เฟซ
การกำหนดข้อมูลส่วนกลางที่สามารถใช้ได้กับรูทีนมากกว่าหนึ่งรายการ
การประกาศตัวแปรที่สามารถใช้ได้ภายในกิจวัตรที่คุณเลือก
การนำเข้าโมดูลทั้งหมดเพื่อใช้ในโปรแกรมหรือรูทีนย่อยอื่น
ไวยากรณ์ของโมดูล
โมดูลประกอบด้วยสองส่วน -
- ส่วนข้อมูลจำเพาะสำหรับการประกาศงบ
- มีส่วนสำหรับรูทีนย่อยและนิยามฟังก์ชัน
รูปแบบทั่วไปของโมดูลคือ -
module name
[statement declarations]
[contains [subroutine and function definitions] ]
end module [name]
การใช้โมดูลในโปรแกรมของคุณ
คุณสามารถรวมโมดูลในโปรแกรมหรือรูทีนย่อยโดยใช้คำสั่ง -
use name
โปรดทราบว่า
คุณสามารถเพิ่มโมดูลได้มากเท่าที่ต้องการแต่ละโมดูลจะอยู่ในไฟล์แยกกันและคอมไพล์แยกกัน
โมดูลสามารถใช้ในโปรแกรมต่างๆได้
โมดูลสามารถใช้งานได้หลายครั้งในโปรแกรมเดียวกัน
ตัวแปรที่ประกาศในส่วนข้อมูลจำเพาะของโมดูลเป็นแบบโกลบอลสำหรับโมดูล
ตัวแปรที่ประกาศในโมดูลจะกลายเป็นตัวแปรส่วนกลางในโปรแกรมหรือรูทีนที่ใช้โมดูล
คำสั่ง use สามารถปรากฏในโปรแกรมหลักหรือรูทีนย่อยหรือโมดูลอื่น ๆ ที่ใช้รูทีนหรือตัวแปรที่ประกาศในโมดูลเฉพาะ
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงแนวคิด -
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
การเข้าถึงตัวแปรและรูทีนย่อยในโมดูล
โดยค่าเริ่มต้นตัวแปรและรูทีนย่อยทั้งหมดในโมดูลจะพร้อมใช้งานสำหรับโปรแกรมที่ใช้โค้ดโมดูลโดย use คำให้การ.
อย่างไรก็ตามคุณสามารถควบคุมการเข้าถึงรหัสโมดูลโดยใช้ไฟล์ 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, ทั้งสองประกาศว่าเป็นส่วนตัวโปรแกรม 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
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังนี้ -
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