خودتوانی

**خودتوانی**  در ریاضیات و علوم کامپیوتر، به ویژگی خنثی بودن تکرار یک رابطه (یا تابع یا عملیات) گفته می‌شود؛ یعنی اینکه تکرار، در نتیجه نهایی یا محتوای اطلاعات تغییری ایجاد نکند. ریشه پیدایش این عملیات در جبر مجرد و برنامه‌نویسی تابعی است. به عنوان مثال تابع قدرمطلق، «خنثی تکرار» است چون بدون تغییر نتیجه می‌توان آن را چندین بار بر روی خودش اعمال کرد (مثلاً |||۵-|||=|۵-|) و تکرار آن بر روی نتیجهٔ نهایی بی اثر است. نمونهٔ دیگری از این عملیات، پروتکل انتقال ابرمتن است که بدون تغییر در محتوای صفحات، می‌توان بارها آن را درخواست و مشاهده کرد.

نمونه ای از خودتوانی ( قدرمطلق) در برنامه نویسی:
```python
def absolute_value(x):
    return abs(x)

# تست خودتوانی
print(absolute_value(absolute_value(-5)))  # خروجی: 5
print(absolute_value(absolute_value(5)))   # خروجی: 5
```


## نمونه های کاربردی
بندانگشتی|دکمه معمولی عابر پیاده نمونه‌ای از یک سیستم بی‌توان است
مثال‌های کاربردی که بسیاری از افراد می‌توانند در زندگی روزمره خود با آن‌ها مواجه شوند عبارتند از: دکمه‌های تماس آسانسور و  دکمه عبور از پیاده‌روی. فعال سازی اولیه دکمه سیستم را به حالت درخواست کننده منتقل می کند تا زمانی که درخواست برآورده شود. فعال‌سازی‌های بعدی دکمه بین فعال‌سازی اولیه و برآورده شدن درخواست تأثیری ندارد، مگر اینکه سیستم به گونه‌ای طراحی شده باشد که زمان برآورده شدن درخواست را بر اساس تعداد فعال‌سازی تنظیم کند.

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

در برنامه‌نویسی، خودتوانی به اطمینان از عملکرد صحیح برنامه‌ها کمک می‌کند. به عنوان مثال، در عملیات مربوط به پایگاه داده، درخواست‌های خودتوان می‌توانند خطرات مربوط به اجرای تکراری را کاهش دهند. این ویژگی به برنامه‌نویسان این امکان را می‌دهد که بدون نگرانی از تأثیرات منفی، عملیات را در صورت نیاز چندین بار اجرا کنند. این امر باعث بهبود کارایی و اعتمادپذیری سیستم‌های نرم‌افزاری می‌شود.
```python
import time

class Button:
    def __init__(self):
        self.request_pending = False

    def press(self):
        if not self.request_pending:
            self.request_pending = True
            self.perform_action()

    def perform_action(self):
        print("Action started")
        time.sleep(3)  # شبیه‌سازی انجام فعالیت
        print("Action completed")
        self.request_pending = False

button = Button()

# تست چندین بار فشار دادن دکمه
button.press()  # فقط این فشردن انجام خواهد شد
button.press()  # نادیده گرفته می‌شود
```
این کد پایتونی ساده تا زمانی که فعالیت انجام نشود اجازه ثبت درخواست جدید را نمیدهد. بعد از شروع فعالیت تا زمان تکمیل فعالیت (برای مثال : 3 ثانیه )

امکان ارسال درخواست وجود ندارد و بعد از سه ثانیه دوباره فرد میتواند در خواست انجام دهد.

## جستارهای وابسته
* نقطه ثابت (ریاضیات)
* کدهای چرخشی

## منابع

رده:خواص عملیات دوتایی
رده:خواص جبری عناصر
رده:عملگرهای بستار
رده:روابط ریاضی
رده:علوم نظری رایانه