در برنامه‌نویسی کامپیوتر، **سبک تورفتگی** قراردادی است که بر تورفتگی بلوک‌های کد برای انتقال ساختار برنامه حاکم است. ما در این مقاله بیشتر به زبان‌های آزاد مانند C و زبان‌های مشتق آن می‌پردازیدپم، اما این می‌تواند برای اکثر زبان‌های برنامه‌نویسی دیگر (مانند زبان‌هایی که در خانواده براکت‌های فرفری هستند) استفاده شود (و در بیشتر مواقع می‌شود) که در آن فضای خالی یا در غیر این صورت ناچیز است. سبک تورفتگی تنها یکی از جنبه‌های سبک برنامه‌نویسی است.

تورفتگی برای بیشتر زبان‌های برنامه‌نویسی الزامی نیست و معمولاً از آن به عنوان نماد ثانویه استفاده می‌شود. در عوض، تورفتگی به انتقال بهتر ساختار یک برنامه به کسانی که کد را می خونند کمک می‌کند. به ویژه، برای مشخص کردن رابطه بین ساختارهای جریان کنترل مانند حلقه‌ها و کدهای موجود در داخل و خارج از آنها استفاده می‌شود. با این حال، برخی از زبان‌های برنامه‌نویسی (مانند پایتون و occam) به جای استفاده از پرانتز یا کلمات کلیدی، از تورفتگی برای تعیین ساختار استفاده می‌کنند. به این قانون آفساید می‌گویند. در چنین زبان‌هایی، تورفتگی برای کامپایلر یا مفسر معنی‌دار است و در آنجا این چیزی بیش از یک وضوح یا سبک است.

در این مقاله از عبارت براکت برای اشاره به پرانتز و از عبارت براکت برای اشاره به براکت‌های فرفری یا همان {} استفاده می‌شود.

قرار دادن پرانتز در عبارات چندجزئی
----------------------------------

تفاوت اصلی بین سبک‌های تورفتگی در قرار دادن پرانتزهای دستورات تو در تو (`{...}`) است که اغلب بعد از یک دستور کنترل مانند (`if`, `while`, `for`) می ایند. جدول زیر این قرارگیری را برای سبک‌های مختلف تورفنگی در یک عبارت را نشان می‌دهد. سبک نشان دهندهٔ توابع با این مورد متفاوت است. سبک برای قرار دادن بریس در عبارات ممکن است با سبک قرار دادن بریس تعریف تابع متفاوت باشد. برای ثبات، بدون توجه به عمق فرورفتگی ترجیحی هر سبک، عمق فرورفتگی در ۴ فاصله نگه داشته شده‌است.

| Brace placement | Styles |
| --- | --- |
| 
```
while (x == y)
{
 something();
 somethingelse();
}

```
 | Allman |
| 
```
while (x == y) {
 something();
 somethingelse();
}

```
 | K&amp;R |
| 
```
while (x == y)
 {
 something ();
 somethingelse ();
 }

```
 | GNU |
| 
```
while (x == y)
 {
 something();
 somethingelse();
 }

```
 | Whitesmiths |
| 
```
while (x == y)
{ something();
 somethingelse();
}

```
 | Horstmann |
| 
```
while (x == y)
 { something()
 ; somethingelse()
 ;
 }

```
 | Haskell |
| 
```
while (x == y)
{ something();
 somethingelse(); }

```
 | Pico |
| 
```
while (x == y) {
 something();
 somethingelse();
 }

```
 | Ratliff |
| 
```
while (x == y)
 { something();
 somethingelse(); }

```
 | Lisp |
| 
```
#define W(c,b) {while(c){b}}
W(x==y,s();se();)

```
 | APL |

تب، فاصله‌ها و اندازه تورفتگی‌ها
--------------------------------

عرض نمایش داده شده برای برگه‌ها را می‌توان در بسیاری از ویرایشگرهای برنامه‌نویسی، از جمله Notepad++ (MS-Windows), TextEdit (MacOS/X), Emacs (یونیکس)، vi (یونیکس) و nano (یونیکس) روی مقادیر دلخواه تنظیم کرد. علاوه بر این، این ویرایشگرها را می‌توان به گونه ای پیکربندی کرد که ترکیبی از تب‌ها و اسپیس‌ها را ایجاد کند یا بین تب‌ها و اسپیس‌ها تبدیل شود تا با طرح‌های تورفتگی خاصی مطابقت داشته باشد. در یونیکس، پهنای ت را نیز می‌توان در پیجرها، مانند less، تنظیم کرد و در همان لحظه با فیلترهایی مانند expand/unexpand تبدیل کرد.

ویراستارهای یونیکس به‌طور پیش فرض برای تعیین موقعیت تب‌ها در فواصل هشت ستونی تنظیم شده‌اند، در حالی که محیط‌های مکینتاش و MS-Windows به‌طور پیش فرض چهار ستونی هستند. این تفاوت باعث عدم تراز کد منبع می‌شود، زمانی که تورفتگی که تب‌ها و اسپیس‌ها را با هم ترکیب می‌کند تحت پیکربندی نمایش داده می‌شود که برگه‌ها را متفاوت از پیکربندی نویسنده نمایش می‌دهد.

اندازه تورفتگی معمولاً از سبک مستقل می‌باشد. آزمایشی در سال ۱۹۸۳ روی کد PASCAL انجام شد که نشان داد اندازه تورفتگی به‌طور بسیار زیادی بر درک بهتر کد تأثیر می‌گذارد. ثابت شده که اندازه تورفتگی بین ۲ تا ۴ کاراکتر تورفتگی بهینه ای است. برای زبان برنامه‌نویسی Ruby و بسیاری از زبان‌های برنامه‌نویسی اسکریپت، و برخی از مدل‌های قالب‌بندی HTML، معمولاً از دو فاصله در هر سطح تورفتگی استفاده می‌شود.

منابع
-----

1. ↑  Miara, Richard J.; Musselman, Joyce A.; Navarro, Juan A.; Shneiderman, Ben (November 1983). "Program Indentation and Comprehensibility" (PDF). *Communications of the ACM*. **26**: 861–867. doi:10.1145/182.358437. Retrieved 3 August 2017.