آنوفل دنیای برنامه نویسی
116 subscribers
250 photos
267 links
آنوفل | Anophel: دنیای بی ‌پایان امکانات برای برنامه‌ نویسان

website: https://anophel.com

پشتیبانی :
@anophel_support

#anophel #آنوفل #برنامه_نویسی
Download Telegram
هوک useActionState در React و Next.js
هوک useActionState برای انجام یکپارچه اکشن های سرور طراحی شده است. وقتی یک کنش سرور را به useActionState ارسال می‌کنید، شیئی حاوی خطا (یا استیت)، وضعیت isPending و خود عمل را برمی‌گرداند. این راه‌اندازی به‌ویژه برای مدیریت ارسال‌های فرم و ردیابی وضعیت بارگذاری قبل از بازگرداندن نتیجه مفید است.

این useActionState در کتابخانه‌های دیگر مانند Remix استفاده می‌شود. این هوک به شما امکان می‌دهد تا وضعیت اجرای یک اکشن (مثل ارسال فرم) را در کامپوننت‌های React مدیریت کنید. به طور خاص، useActionState به شما اجازه می‌دهد تا وضعیت درخواست (loading, success, error) را دنبال کنید و به تناسب آن‌ها رفتار مناسب را در کامپوننت پیاده‌سازی کنید.

ویژگی‌ها و مزایا
- مدیریت وضعیت درخواست: با استفاده از این هوک می‌توانید به سادگی وضعیت‌های مختلف یک درخواست را مدیریت کنید.
- تجربه کاربری بهتر: با استفاده از وضعیت‌ها (مانند isLoading) می‌توانید انیمیشن‌های لودینگ، پیام‌های خطا، یا تاییدیه‌های موفقیت را نمایش دهید.
- سازگاری با فرم‌ها و اکشن‌ها: به خصوص برای مدیریت فرم‌ها و اکشن‌هایی که نیاز به ارتباط با سرور دارند مناسب است.

بهترین زمان استفاده از هوک useActionState
- فرم‌ها و ارسال داده‌ها: زمانی که نیاز دارید وضعیت ارسال فرم را مدیریت کنید.
- درخواست‌های API: برای مدیریت وضعیت درخواست‌های API (loading, error, success).


اگر نکته یا مورد خاصی بود خوشحال میشم در بخش نظرات اشتراک بگذارید.

#نکست #ری_اکت #react #nextjs

Anophel آنوفل
مهم ترین هوک در React/Next.js در 2024 : هوک useActionState

🔺 فرم ها بخشی جدایی ناپذیر از برنامه های کاربردی وب هستند که تعامل کاربر و ارسال داده ها را تسهیل می کنند. از لحاظ تاریخی، مدیریت استیت های فرم و رسیدگی به ارسال فرم ها شامل هوک ها و استراتژی های مختلفی بود. با معرفی useActionState، چشم انداز مدیریت فر...

🌐 : مهم ترین هوک در React/Next.js در 2024 : هوک useActionState
هنگامی که دارید کد هاتون رو کامیت می کنید هیچ وقت کد های کامنت شده رو کامیت نکنید این باعث کثیف شدن پایگاه کد هاتون می شود و همچنین این باعث میشه از اصل کنترل ورژن دورتر شوید.

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

دوری از اصل کنترل ورژن:
یکی از اصول مهم کنترل ورژن این است که هر تغییر در کد به دقت مستند شود و تاریخچه‌ی تغییرات به صورت واضح و قابل پیگیری باشد. زمانی که شما کدهای کامنت‌شده را کامیت می‌کنید، در واقع دارید کدی را ذخیره می‌کنید که نه کامل است و نه مشخص است که چرا کامنت شده. این باعث می‌شود که دلایل تغییرات به درستی مستند نشود و در آینده برای شما یا همکارانتان فهمیدن دلیل این کامنت‌ها و بازگرداندن کدهای صحیح دشوار شود.

پایبندی به فلسفه کد تمیز:
کد تمیز (Clean Code) به معنای کدی است که خوانا، قابل فهم و بدون شلوغی‌های اضافی باشد. وجود کدهای کامنت‌شده در مخزن شما برخلاف این فلسفه است، زیرا این کدها می‌توانند باعث ایجاد ابهام و سردرگمی شوند. مثلاً ممکن است یک توسعه‌دهنده دیگر از خودش بپرسد که آیا این کد کامنت‌شده باید به کد اصلی اضافه شود یا نه. این موضوع می‌تواند باعث کاهش بهره‌وری و ایجاد خطاهای غیرمنتظره در آینده شود.


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

خلاصه کلام‌ :
در مجموع، کامیت کردن کدهای کامنت‌شده نه تنها باعث کثیف شدن پایگاه کد می‌شود بلکه می‌تواند اصول کنترل ورژن را زیر سوال ببرد و درک و نگهداری پروژه را برای شما و همکارانتان در آینده دشوارتر کند. به جای کامیت کردن کدهای کامنت‌شده، سعی کنید از ابزارهای کنترل ورژن و مدیریت پروژه به درستی استفاده کنید تا پایگاه کد تمیزی داشته باشید.

Anophel آنوفل

#گیت #کامیت #commit
8 بهترین روش امنیتی در لاراول

🔺 بسیاری از توسعه دهندگان جدید این سوال را مطرح می کنند که آیا لاراول ایمن است یا خیر. لاراول ویژگی های امنیتی مختلفی را ارائه می دهد، اما خود چارچوب نه ذاتا امن است و نه ناامن. به اندازه اقداماتی که توسعه دهندگان اجرا می کنند، ایمن است. اجازه دهید در...

🌐 : 8 بهترین روش امنیتی در لاراول
در PHP، یک Closure یا Closure Function تابعی است که می‌تواند درون یک متغیر ذخیره شود و به عنوان آرگومان به توابع دیگر ارسال شود. Closure ها توابع ناشناس هستند این نوع توابع با استفاده از کلمه کلیدی function ایجاد می‌شوند و ممکن است به متغیرها و منابعی از حوزه‌ای که در آن تعریف شده‌اند، دسترسی داشته باشند. این ویژگی به Closure اجازه می‌دهد که به صورت دینامیک رفتار کند و با شرایط محیطی که در آن تعریف شده است، همگام باشد.

یکی از قابلیت‌های مهم Closure در PHP استفاده از کلمه کلیدی use برای دسترسی به متغیرهای خارجی است. این امکان به توابع Closure اجازه می‌دهد که به داده‌هایی که خارج از دامنه‌ی تابع تعریف شده‌اند، دسترسی داشته باشند.

در این مثال، Closure به متغیر message$ که خارج از تابع تعریف شده است، دسترسی دارد و آن را در خروجی به کار می‌برد.

تفاوت Closure با روش‌های دیگر

1. قابلیت حمل داده : برخلاف توابع معمولی که تنها درون حوزه‌ای که تعریف شده‌اند به متغیرها دسترسی دارند، Closure Function می‌تواند داده‌های محیط خود را حمل کند. این امر با استفاده از کلمه کلیدی use ممکن می‌شود.

2. استفاده در برنامه‌نویسی فانکشنال : Closureها در برنامه‌نویسی فانکشنال (Functional Programming) کاربرد زیادی دارند. به عنوان مثال، می‌توان آن‌ها را به عنوان آرگومان به توابع دیگر ارسال کرد که این ویژگی در توابع معمولی ممکن نیست.

3. انعطاف‌پذیری بیشتر : Closureها به دلیل قابلیت حمل داده و دسترسی به متغیرهای بیرونی، انعطاف‌پذیری بیشتری نسبت به توابع معمولی دارند. این امر باعث می‌شود که بتوان از آن‌ها در شرایط پیچیده‌تر استفاده کرد.

علت استفاده از Closure
استفاده از Closure در مواردی که نیاز به حمل داده‌های خارج از تابع به همراه تابع داریم بسیار مفید است. این امر به ویژه در مواردی که نیاز به ایجاد توابع callback، استفاده از توابع higher-order، یا ایجاد کدهای پویا داریم، اهمیت پیدا می‌کند.

به عنوان مثال، در هنگام کار با توابعی مثل array_map یا array_filter که نیاز به تابع callback دارند، Closureها می‌توانند برای ایجاد توابع callback پیچیده با داده‌های مرتبط استفاده شوند.

نتیجه‌گیری

کلاژور ها Closure ابزارهای قدرتمندی در PHP هستند که به برنامه‌نویسان اجازه می‌دهند توابع پویا و قابل حمل ایجاد کنند که می‌توانند داده‌های محیطی را به همراه خود داشته باشند. این ویژگی‌ها باعث می‌شود Closureها در بسیاری از موقعیت‌ها که انعطاف‌پذیری و قابلیت حمل داده اهمیت دارد، گزینه‌ای مناسب باشند.

#php #laravel #لاراول #closure_php

Anophel آنوفل
تابع (*)Count در مقابل تابع Count(1) در SQL

در SQL، توابع (*)Count و COUNT(1) هر دو برای شمارش رکوردها در جدول استفاده می‌شوند، اما تفاوت‌هایی جزئی از نظر عملکرد و کاربرد دارند. بیایید به تفاوت‌ها و شباهت‌های آن‌ها بپردازیم.

تابع Count(*)
تابع (*)Count تمام رکوردهای موجود در جدول را می‌شمارد، صرف نظر از اینکه مقدار فیلدها NULL باشند یا خیر. این تابع تمام سطرهای جدول را بدون در نظر گرفتن محتوای ستون‌ها حساب می‌کند.

مثال:
SELECT COUNT(*) FROM my_table;

در این مثال، تمامی رکوردهای موجود در جدول my_table شمارش می‌شوند.

تابع Count(1)
تابع COUNT(1) نیز رکوردهای جدول را می‌شمارد، اما از عدد ۱ به عنوان یک مقدار ثابت استفاده می‌کند. این عدد در اصل معادل یک ستون محاسبه‌شده است که همیشه مقدار ۱ را برمی‌گرداند. این تابع نیز تمام سطرها را می‌شمارد، حتی اگر فیلدهای ستون‌ها NULL باشند، چرا که عدد ۱ همواره یک مقدار غیر-NULL است.

مثال:
SELECT COUNT(1) FROM my_table;

در اینجا نیز تمام رکوردها، فارغ از مقدار ستون‌ها، شمارش می‌شوند.

### تفاوت‌های عملکردی و امنیتی
از لحاظ پرفورمنس و عملکرد تفاوت خاصی ندارند.

علت استفاده از هرکدام
- تابع (*)Count: بیشتر مواقع، زمانی که می‌خواهید تعداد کل رکوردهای جدول را بدانید، از این تابع استفاده می‌شود. این رایج‌ترین و پرکاربردترین شکل استفاده از COUNT است.

- تابع COUNT(1): گاهی برای بهبود درک کد یا به دلایل سلیقه‌ای استفاده می‌شود، زیرا بعضی توسعه‌دهندگان بر این باورند که COUNT(1) واضح‌تر است (چرا که عدد ۱ همیشه وجود دارد). اما از نظر عملکردی تفاوتی ایجاد نمی‌کند.

کدام یک بهتر است؟
- پیشنهاد کلی: استفاده از (*)Count استانداردتر و رایج‌تر است. این تابع معنای واضح‌تری دارد و برای شمارش کل رکوردها بهینه شده است.

- معیار استفاده: اگرچه تفاوت عملکردی ناچیزی وجود دارد، پیشنهاد می‌شود که از (*)Count استفاده کنید، زیرا هم از نظر خوانایی بهتر است و هم اکثر پایگاه داده‌ها بهینه‌سازی‌های خود را برای این تابع انجام داده‌اند.

خلاصه کلام :

- هر دو (*)Count و COUNT(1) برای شمارش رکوردها در جدول استفاده می‌شوند و از نظر عملکرد در پایگاه داده‌های مدرن تفاوت خاصی ندارند.
- تابع (*)Count استانداردتر و رایج‌تر است و معمولاً توصیه می‌شود به دلیل خوانایی بیشتر و پشتیبانی بهتر از آن استفاده شود.

#sql #database #دیتابیس #پایگاه_داده #mysql

Anophel
Bootstrap در مقابل Tailwind CSS: مقایسه فریمورک های برتر CSS

🔺 امروزه فریمورک های CSS متعددی در دسترس هستند که هر کدام دارای پیشنهادات منحصر به فرد خود هستند. انتخاب چارچوب مناسب CSS از بین این گزینه‌ها می‌تواند چالش برانگیز باشد، زیرا اکثر کاربران مطمئن نیستند که کدام چارچوب برای پروژه توسعه وب آنها مناسب‌تر اس...

🌐 : Bootstrap در مقابل Tailwind CSS: مقایسه فریمورک های برتر CSS

#css #tailwind #bootstrap
بهترین روش های MongoDB: بهینه سازی عملکرد

🔺 MongoDB به عنوان یک راه حل قدرتمند دیتابیس NoSQL که انعطاف پذیری، مقیاس پذیری و سهولت استفاده را ارائه می دهد، محبوبیت گسترده ای به دست آورده است. با این حال، برای استفاده از پتانسیل کامل آن، توسعه دهندگان باید به بهترین شیوه هایی که عملکرد و قابلیت...

🌐 : بهترین روش های MongoDB: بهینه سازی عملکرد

#دیتابیس #mongodb
زبان برنامه نویسی GO یا Golang چیست؟ بررسی تخصصی

🔺 گو (Go) که با نام گولنگ (Golang) نیز شناخته می شود، یک زبان برنامه نویسی متن باز، کامپایل شده و تایپ شده استاتیک است که توسط گوگل طراحی شده است. این ساده، با کارایی بالا، خوانا و کارآمد ساخته شده است. Go (یا Golang) قطعاً محبوب‌ترین زبان برنامه‌نویسی...

🌐 : زبان برنامه نویسی GO یا Golang چیست؟ بررسی تخصصی

#Go #golang #گو #گولنگ
Concurrency در Go : بررسی عمیق Goroutine ها و Channel ها

🔺 Concurrency یک مفهوم اساسی در Go (Golang) است که اجرای چندین کار را به طور همزمان امکان پذیر می کند و برنامه های ما را کارآمد، پاسخگو و قادر به استفاده موثر از پردازنده های چند هسته ای می کند. یکی از جنبه های کلیدی برنامه نویسی همزمان در Go، استفاده...

🌐 : Concurrency در Go : بررسی عمیق Goroutine ها و Channel ها

#Go #golang #گو #گولنگ
بین JWT و PASETO از کدام یک استفاده‌ کنیم؟

JWT چیست؟
جیسون وب توکن JWT مخفف JSON Web Token است. این یک استاندارد باز (RFC 7519) است که یک روش فشرده و مستقل را برای انتقال ایمن اطلاعات بین طرفین به عنوان آبجکت JSON تعریف می کند.


پاستو PASETO چیست؟
پاستو Paseto که مخفف Platform-Agnostic Security Tokens است، مشخصاتی برای توکن‌های امن stateless است.

و جایگزین مدرن و بهتر برای JWT ارائه می‌کند و برخی از آسیب‌پذیری‌های ذاتی آن را برطرف می‌کند و بر پیش‌فرض‌های ایمن و سهولت اجرا تأکید می‌کند.

برخلاف ساختار تک و عمومی JWT، پاستو از یک رویکرد نسخه‌سازی شده با دو هدف مشخص استفاده می‌کند:

توکن های لوکال: این برای سشن stateful و سمت سرور طراحی شده است. همچنین معمولاً از رمزنگاری با symmetric-key استفاده می‌کند، که در آن از key مخفی یکسانی برای رمزگذاری و رمزگشایی استفاده می‌شود.

توکن های پابلیک: این برای اپلیکیشن های stateless و موارد استفاده شامل رمزنگاری public-key در نظر گرفته شده است. این توکن‌ها را می‌توان بدون نیاز به ذخیره‌سازی سمت سرور به‌طور ایمن منتقل و تأیید کرد.


آنوفل

#jwt #paseto
کاهش تکرار کد ها در لاراول

🔺 یکی از بزرگترین مشکلات در برنامه نویسی تکرار کد ها می باشد. مخصوصا در زمانی که شما یک باگ دارید و فکر می کنید که آن را حل کرده اید اما چندین مورد از این باگ باقی مانده است.ما در این مقاله قصد داریم با یک آموزش ساده درباره کاهش تکرار کد ها صحبت کنیم....

🌐 : کاهش تکرار کد ها در لاراول
مجیک متد یا داندر متد در پایتون

🔺 Magic Methods یا Dunder Methods که به صورت فارسی می شود متد های جادویی و منظور از داندر(Dunder) دو تا آندر لاین(__) می باشد. که در شی گرایی پایتون در دسترس هستند. مجیک متد ها یک سری متد ها هستند که در کلاس ها می توانید به آن ها دسترسی پیدا کتید که در...

🌐 : مجیک متد یا داندر متد در پایتون
تو جاوا اسکریپت ما سه نوع کد داریم :
1. کد Synchronous
2. کد macrotask
3. کد Microtask

نکته کلیدی سوال این سه مورد هستند.
در اولی که پیش فرض جاوااسکریپت هست کد لاین به لاین اجرا می شود و تا لاین قبلی تمام نشد لاین جدید اجرا نمیشه.

دومی : بعد از اجرای کد های Synchronou و قبل میکروتسک ها اجرا می شود مثل setTimeout و setInterval و ..
.

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

بررسی مثال:
بخش Synchronous :

console.log(1); بلافاصله اجرا می‌شود و مقدار 1 در کنسول چاپ می‌شود
setTimeout یک ماکروتسک تعریف می‌کند، اما چون setTimeout تنها تنظیم کننده‌ی تاخیر است، این عملیات به تعویق می‌افتد. پس setTimeout هنوز چیزی چاپ نمی‌کند

console.log(2); نیز بلافاصله اجرا می‌شود و مقدار 2 در کنسول چاپ می‌شود

console.log(4) بلافاصله بعد از promise.then فراخوانی می‌شود و مقدار 4 در کنسول چاپ می‌شود

پس از اتمام اجرای کدهایSynchrono نیز setTimeout که یک ماکروتسک است، اجرا می‌شود.ابتدا مقدار "timerStart" را در کنسول چاپ می‌کند.سپس success فراخوانی می‌شود که باعث می‌شود promise به حالت fulfilled برسد و یک میکروتسک (یعنی promise.then) به صف میکروتسک‌ها اضافه شود.سپس مقدار "timerEnd" را چاپ می‌کند.

در‌اخرم میکروتسک اجرا می شود. success

خروجی نهایی :
1
2
4
timerStart
timerEnd
success

آنوفل

#javascript #js #نکته #جاوااسکریپت
زباله جمع کن (Garbage Collection) در Go :بررسی عمیق تکنیک مدیریت حافظه

🔺 گولنگ یا Go یک زبان برنامه نویسی تایپ شده و کامپایل شده است. در میان بسیاری از ویژگی‌های آن، مکانیسم جمع‌آوری زباله یا همان Garbage Collection در Go به عنوان یک جزء حیاتی برای مدیریت حافظه برجسته است. در این مقاله از آنوفل، به نحوه عملکرد Garbage Col...

🌐 : زباله جمع کن (Garbage Collection) در Go :بررسی عمیق تکنیک مدیریت حافظه

#گو #گولنگ #go #golang
آشنایی با Logging در Go: بررسی عمیق کتابخانه Zap

🔺 در دنیای توسعه اپلیکیشن، لاگ (logging) نقش مهمی ایفا می کند که اغلب مورد توجه قرار نمی گیرد. مانند این است که یک دستیار سخت کوش داشته باشید که به طور مداوم تمام جزئیات عملکرد برنامه و تعاملات کاربر را یادداشت می کند. در این مقاله از آنوفل خواهیم دید...

🌐 : آشنایی با Logging در Go: بررسی عمیق کتابخانه Zap


#گو #گولنگ #go #golang #logging
افزایش عملکرد در Go: بررسی Static و Dynamic Allocation

🔺 در دنیای برنامه نویسی، به ویژه در Go (همچنین به عنوان Golang شناخته می شود)، دو روش اصلی برای تخصیص (allocation) یک اسلایس جدید وجود دارد: استفاده از تابع make برای پیش‌ تخصیص slice و تنظیم هر مقدار، یا ایجاد یک slice خالی و اضافه کردن عناصر جدید به...

🌐 : افزایش عملکرد در Go: بررسی Static و Dynamic Allocation

#گو #گولنگ #go #golang
ساخت یک معماری فرانت اند تمیز و مقیاس پذیر

🔺 همانطور که چشم انداز دیجیتال همچنان به تکامل خود ادامه می دهد، اهمیت معماری frontend برای برنامه های کاربردی وب را نمی توان دست کم گرفت. یک معماری ظاهری خوب طراحی شده نه تنها تجربه کاربر را افزایش می دهد، بلکه قابلیت نگهداری و مقیاس پذیری پروژه را نی...

🌐 : ساخت یک معماری فرانت اند تمیز و مقیاس پذیر

#فرانت_اند #frontend #react #nextjs