**زبان برنامه‌نویسی اف** (به انگلیسی: F programming language) یک زبان برنامه‌نویسی ماژول گرا، کامپایلری و محاسبه‌کننده عددی است. زبان F برای برنامه نویسی علمی و محاسبات علمی طراحی شده‌است. این زبان در شرکت فرترن و به عنوان یک فورترن جدید توسعه یافت که آن را زیرمجموعه‌ای از زبان برنامه‌نویسی Fortran95 وFortran90 کرده‌است. F ویژگی‌های عددی و انتزاع داده ها در این زبان‌ها را با هم ترکیب کرده‌است. F با زبان‌های قدیمی تر نیز سازگاری دارد، یعنی اجازه می‌دهد برنامه‌ای به زبان Fortran77 فراخوانی شود. **زبان برنامه‌نویسی اف** از کامپایلر مشابه Fortran95 استفاده می‌کند (g95). به کامپایلرهای F در ویندوز و سیستم‌های عامل متعدد لینوکس به صورت رایگان یا به عنوان یک بسته نرم افزاری از Fortran Store می‌توان دسترسی پیدا کرد.

زبان اف با زبان برنامه‌نویسی اف شارپ نباید اشتباه گرفته شود.

F برنامه نمویسی ماژول گرایانه را ترغیب می‌کند. کد کردن و فهمیدن یک واحد از F ساده است. در مقایسه با برنامه‌نویسی شی گرایانه، برنامه‌نویسی ماژول گرایانه امکان استفاده مجدد بدون هیچ سوء استفاده‌ای را فراهم می‌کند.
F یک زیرمجموعه از جدیدترین نسخه فورترن که قدرتمندترین زبان عددی جهان و با دقت و مهارت است، می‌باشد. یادگیری F دو فایده مهم دارد:

1. استفاده گسترده‌ای در کاربردهای غیر تحصیلاتی دارد، بنابراین می‌تواند مهارت مفیدی در جهان مهندسی یا تجارت داشته باشد.
2. برنامه‌نویسی در زبان‌های معروف دیگر برای فهم افراد مبتدی پیچیده و سخت است.

دید کلی
-------

به دلیل اینکه تنها یک راه برای نوشتن کدها وجود دارد، **F** یک زبان مجاز نیست. همه کلمات کلیدی و و نام‌های توابع، کلمات رزرو شده در F هستند؛ بنابراین نام‌ها نمی توانند مشابه هیچ کلمه کلیدی باشند. F با بیش از صد روند ذاتی که برای آن ساخته شده‌است، تجهیز شده‌است، به همین دلیل نیازی به کتابخانه‌ها یا ماژول‌های استاندارد اضافه ندارد. کلمات کلیدی زبان و نام‌های توابع ذاتی کلمات کلیدی رزرو شده در F هستند و هیچ اسم دیگری نمی تواند دقیقاً این فرم‌ها را داشته باشد.

* **فرم منبع**

مجموعه کاراکترهای مشابه با Fortran90/95 با محدودیت 132 کاراکتر را شامل می‌شود. کلمات رزرو شده همیشه به صورت حروف کوچک نوشته می‌شوند. هر حرف بزرگ ممکن است در یک ثابت کاراکتری ظاهر گردد. نام متغیرها محدودیتی در کاراکترهای کوچک و بزرگ ندارد. علامت نقل قول به عنوان حائلی برای رشته‌های کاراکتری استفاده می‌شود.

* **قالب بندی**

F قالب بندی را حمایت می‌کند. یک قالب بندی می‌تواند شامل \* (برای قالب بندی راهنمای لیست) یا یک لیست از صفات ویرایشی، کنترل توصیف‌کننده ویراستاری یا موارد قالب بندی لیست باشد. برای جداسازی موارد قالب بندی از کاما استفاده می‌شود. بعد از آخرین پرانتز بندی راست در یک تعیین قالب بندی یا متغیر قالب بندی کاراکتر، استفاده از کاراکترها مجاز نیست. **tn ، tln ، trn ، [r]/ ، : ، s ، sp ، ss** توصیف‌کننده‌های کنترلی هستند. F کنترل نورد را حمایت نمی‌کند، زیرا این وابسته به فایل و سیستم عامل است.

عملگر ها
--------

F از تعداد زیادی از عملگرهای استاندارد که در بسیاری دیگر از زبان‌ها استفاده می‌شوند حمایت می‌کند. عملگرهایی که در F حمایت می‌شوند عبارتند از:

* عملگرهای محاسباتی : \*\* (توان) ، + (جمع) ، - (تفریق) ، / (تقسیم) ، \* (ضرب)
* عملگرهای رابطه‌ای : > ، => ، == ، =/ ، < ، =<
* عملگرهای منطقی : .and. ، .or. ، .not. ، .eqv. ، .neqv.
* اتصال کاراکتر : //
* عملگرهای تعریف شده : .letters.

عملگر تخصیص با علامت تساوی "=" نشان داده می‌شود. علاوه بر این اشاره گر با "<=" و نظرات با "!" نمایش داده می‌شوند.

```
variable = expression ! assignment 
pointer => target ! pointer assignment

```

جملات و جریان کنترلی
--------------------

ّF سه ساختار کنترلی را حمایت می‌کند: **ساختار case** ، **ساختار if** و **ساختار do**.

* ساختار if یک عبارت منطقی را بررسی کرده و با شرایطی از بلوک خارج می‌شود.
* ساختار case شبیه ساختار if است با این تفاوت که محدود به انواع داده اعداد صحیح و کاراکتر می‌شود.
* ساختار do حلقه‌هایی هستند که این ساختار می‌تواند یک نام انتخابی داشته باشد. ممکن است حلقه‌ها در F کنترل حلقه یا تکرار حلقه روی یک اندیس را نداشته باشند. تمامی حلقه‌ها با دستور **end do** پایان یافته و هم چنین ممکن است یک نام ساختاری به آن‌ها داده شود. فرم do while توسط F حمایت نمی شود.

دو بیانیه دیگر وجود دارند که می‌توانند ترتیب اجرای برنامه F را تغییر دهند که آن دو **return** و **stop** هستند.
مثالی از ساختارهای کنترلی:

```
real:: x
do i = 100
 x += i
 print i
 cycle
end do

max : do
 if ( x > y) then
 exit max:
 end if
 x = y;
end max
stop

if (x < y) then
 x = x + y;
else if ( x > y) then
 x = y - x;
end if

select case (maximum):
 case (0)
 x = 0
 case (1)
 x = 1
 case (5)
 x = 5
 case default 
 x = 10
end select

```

یک برنامه اصلی با بیانیه program شروع شده و با بیانیه end program پایان می یابد.
F رویه‌هایی که در یک واحد نباشند را نمی پذیرد. F بیشتر ماژول‌ها و رویه‌های ماژول Fortran90/95 را حمایت می‌کند. توابع و زیرروال‌ها قسمتی از رویه‌های ماژولی هستند. همه آرگومان‌های یک رویه ساختگی باید در یک بلوک رابط توصیف شوند. F رویه‌های درونی را حمایت نمی‌کند. همه رویه‌ها به یک نتیجه نیاز دارند تا مقدار تابع را بازگرداند. توابع نمی توانند مقدار آرگومان ساختگی را تغییر دهند. F بازگشتی را حمایت می‌کند.

رویه‌های ماژولی می‌توانند با جملات (بیانیه ها) فراخوانی ارجاع داده شوند. هرگاه یک رویه ذاتی به عنوان یک آرگومان استفاده شود یا با یک رویه ماژولی توسعه یابد، نام آن نیز باید در یک بیانیه ذاتی اعلام گردد. رویه‌های ذاتی، رویه‌هایی هستند که توسط F فراهم شده‌اند. بیشتر رویه‌های ذاتی Fortran90/95 در F می‌باشند. این رویه‌ها کلمات رزرو شده هستند. هم چنین رویه‌هایی وجود دارند که در Fortran90/95 بوده‌اند ولی در F حذف شده‌اند مانند : achar ، iachar ، lge ، lgt ، llt ، transfer ، dble ، dim ، dprod و mod.
یک بلوک رابط، یک رویه که در F نباشد را به صورت صریح اعلام می‌کند. عملگرها و تخصیص‌هایی که توسط کاربر تعریف می گردند باید در بلوک رابط ظاهر گردند.

```
interface operator ( defined operator )
 ...
 module procedure name
 ....
end interface [operator ( defined operator )]
interface assignment (=)
 ...
 module procedure name
 ...
end interface [ assignment (=)]

```

I/O (ورودی و خروجی)
-------------------

F ورودی صفحه کلید استاندارد و نمایش و خروجی متنی استاندارد را حمایت می‌کند. هر بیانیه ورودی و خروجی باید با یک لیست کنترلی دنبال شوند. لیست کنترلی ورودی/خروجی باید شامل یک عدد واحد باشد. هم چنین می‌توانند شامل موارد انتخابی مانند **fmt ، advance ، isotat ، rec** و **size** باشند.اگر واحد یک کاراکتر باشد، ورودی/خروجی برای یک فایل داخلی است. \* برای قالب بندی پیش‌فرض یا راهنمای لیست استفاده می‌شود. این به همراه بیانیه خواندن و نوشتن استفاده می گردد. F هم چنین موارد سنتی بدون قالب بندی ورودی/خروجی را نیز حمایت می‌کند.
دستورالعمل بیانیه ورودی:

```
read (i/o control list ) [input list]
read format [, variable list]

```

دستورالعمل بیانیه خروجی:

```
write (i/o control list ) [output list]
print format [, output list]

```

انواع داده
----------

مشابه Fortran اختصاص نوع از نوع، لیستی از صفات برای متغیرهای اعلان شده و لیست متغیر است. انواع ذاتی شامل اعداد صحیح ، اعداد حقیقی ، اعداد مختلط ، کاراکتری و منطقی هستند.
اعلان متغیرها توسط لیستی از صفات دنبال می‌شوند. صفات مجاز پارامتر، عمومی (public) ، اختصاصی (private) ، قابل تخصیص (allocatable) ،بعد آرایه (dimension) ، اختیاری (optional) ، اشاره گر (pointer) ، ذخیره (save) و هدف (target) هستند. لیست صفات با نماد "::" دنبال می‌شود که جزئی از نحو آن هست. F هم چنین اجازه مقداردهی اولیه اختیاری به لیست اشیا را می‌دهد.

مثال اعلان نوع غیررسمی:

```
! type [,attribute list] :: entity declaration list
real :: x, y ! declaring variables of type real x,y without an attribute list
integer (kind = long), dimension (100) :: x ! declaring variable of type big integer array with the identifier x
 character (len = 100) :: student\_name ! declaring a character type variable with len 100

```

با وجود اینکه F یک زبان ماژول گرا است و کلاس‌ها را حمایت نمی‌کند، برنامه نویسان می‌توانند نوع مورد نظر خود را تعریف کنند(تعریف توسط کاربر). انواع تعریف شده توسط کاربر مانند ساختارها در C و C++ است که یک نوع به این صورت است که انواع مختلفی از متغیرها در تنها یک ساختار وجود دارند.

به عنوان مثال:

```
type, public :: City
 character (len = 100) :: name
 character (len = 50):: state
end type City

```

تمام موارد در یک لیست، خصوصیات مشابهی در یک بیانیه اعلان نوع داده شده دارند. به علاوه اعلان‌ها به جای خصوصیت محور بودن موجودیت محور هستند.

منابع
-----

* ویکی پدیای انگلیسی

لینک‌های خارجی
--------------

* F Programming Language Homepage بایگانی‌شده در ۹ ژانویه ۲۰۱۵ توسط Wayback Machine