با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، در این جلسه از آموزش های دوره فرترن ، به ماژول ها در فرترن و سینتکس ماژول در فرترن می پردازیم.یک ماژول مانند بسته ای است که شما می توانید تابع ها و زیرمجموعه های خود را نگهداری کنید، و بسته بندی زیر برنامه ها در فرترن را نیز انجام دهید. در صورتی که شما یک برنامه بسیار بزرگ بنویسید، یا توابع یا زیرشاخه های شما در بیش از یک برنامه استفاده شود.ماژول ها یک راه برای تقسیم برنامه های شما بین چندین فایل فراهم می کند.
ماژول ها برای موارد زیر استفاده می شوند :
بسته بندی زیر برنامه ها ، داده ها و بلوک های رابط.
تعیین داده های جهانی که می تواند در بیش از یک روال استفاده شود.
اعلام متغیرهایی که می توانند در هر رویه ای که انتخاب می کنید در دسترس قرار گیرند.
وارد کردن یک ماژول به طور کامل، برای استفاده، به یک برنامه یا زیربرنامه.
یک ماژول شامل دو قسمت است :
بخش مشخصات برای فراخوانی عبارات
بخش محتوا برای تعاریف زیر مجموعه و تشخیص تابع کلی یک ماژول
1 2 3 4 | module name [statement declarations] [contains [subroutine and function definitions] ] end module [name] |
شما می توانید یک ماژول را در یک برنامه یا زیربرنامه از طریق عبارت زیر استفاده کنید :
1 | use name |
لطفا توجه داشته باشید که :
شما می توانید بسیاری از ماژول ها را به عنوان مورد نیاز اضافه کنید، هر یک در فایل های جداگانه و به طور جداگانه کامپایل می شود.
یک ماژول می تواند در برنامه های مختلف استفاده شود.
ماژول می تواند چندین بار در همان برنامه استفاده شود.
متغیرهای اعلام شده در بخش مشخصات ماژول، ماژول جهانی هستند.
متغیرهای اعلام شده در یک ماژول تبدیل به متغیرهای جهانی در هر برنامه یا روال است که در آن ماژول استفاده می شود.
عبارت استفاده شده می تواند در برنامه اصلی یا هر زیرمجموعه یا ماژول دیگری که از روال یا متغیرهای اعلام شده در یک ماژول خاص استفاده و ظاهر شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 |
وقتی که شما کدهای بالا را اجرا و کامپایل می کنید خروجی زیر مشهاده می شود :
1 2 3 4 | 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 |
به طور پیش فرض، تمام متغیرها و زیرمجموعه ها در یک ماژول به برنامه ای که از کد ماژول استفاده می کند، در دستورالعمل قرار می گیرد.با این حال، می توانید دسترسی به کد ماژول را با استفاده از خصوصیت خصوصی و عمومی کنترل کنید.
هنگامی که برخی از متغیرها یا زیرمجموعه ها را به صورت خصوصی اعلام می کنید، در خارج از ماژول موجود نیست.
مثال زیر این مفهوم را نشان می دهد :
در مثال قبلی ما دو متغیر با مولفه های e و pi داشتیم. اجازه دهید ما آنها را خصوصی کنیم و سپس خروجی را ببینیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 |
هنگامی که شما کدهای بالا را اجرا و کامپایل کنید با پیغام خطای زیر مواجه می شوید:
1 2 3 4 5 6 7 8 | 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 دیگر نمی تواند به این متغیرها دسترسی پیدا کند.
با این وجود، دیگر زیرمجموعه های ماژول می توانند به آنها دسترسی پیدا کنند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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 |
هنگامی که شما کدهای بالا را اجرا و کامپایل کنید، نتیجه زیرا مشاهده خواهید کرد.
1 2 3 4 | 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 |
ماژول ها در فرترن ، اگر توابع تعريف شده در برنامه هاي مختلف مورد نياز باشند، ميتوان توابع پركاربرد را در يك فايل ماژول ذخيره نمود و از آن در فايل منبع اصلي استفاده نمود. آموزش سینتکس ماژول در فرترن نیز به اتمام رسید. با ما همراه باشید تا در جلسه بعد با توابع درونی در فرترن آشنا شوید.