#ادامه - پست قبل
🔹 حالا میخواین بدونید بعد این قابلیت چه اتفاقی میوفته ؟ این شکلی میشه !
البته فعلن باتوجه به اعلام تیم ری اکت منتظر بعد کریسمس باید باشیم و ببینیم که این فیچر که فعلن در حالت توسعه و تحقیق تیم ری اکت هست کی قراره ریلیز بشه!
💎ممنون از وقتی که قرار دادین و این مقاله رو مطالعه کردین اگر این مقاله رو دوست داشتین حتما برای دوستانتون بفرستین تا بتونن از اتفاقاتی که در حوزه ری اکت قراره بیوفته مطلع بشن !✌🏻
@fullStackDevs
🔹 حالا میخواین بدونید بعد این قابلیت چه اتفاقی میوفته ؟ این شکلی میشه !
import Momentfrom 'moment'; // Zero bundle size❇️ بله دقیقا چیزی که انتظار داشتیم ! پکیج های ما دیگ سمت سرور باندل سایزی رو به اپلیکیشن ما تحمیل نمیکنند و این فیچر به نظر میتونه یکی از انقلابی ترین قابلیت های ری اکت بین تمامی نسخه هایی باشه که تا الان ریلیز کرده !!!
import sanitizeHtml from 'sanitize-html'; // Zero bundle size
function Calender({text}) {
// some code for date converting and use sanitizeHtml
// for cleaning Html From Ckeditor markups !
}
البته فعلن باتوجه به اعلام تیم ری اکت منتظر بعد کریسمس باید باشیم و ببینیم که این فیچر که فعلن در حالت توسعه و تحقیق تیم ری اکت هست کی قراره ریلیز بشه!
💎ممنون از وقتی که قرار دادین و این مقاله رو مطالعه کردین اگر این مقاله رو دوست داشتین حتما برای دوستانتون بفرستین تا بتونن از اتفاقاتی که در حوزه ری اکت قراره بیوفته مطلع بشن !✌🏻
@fullStackDevs
Telegram
Web Devs
#Reactjs
#React17
#قسمت2
🔹بالخره بعد این مقدمه طولانی میرسیم سر اصل مطلب و اون هدیه کریسمسی تیم توسعه ری اکت به توسعه دهندگانشه ! و اون هم چیزی نیست جز Server Components !!
تیم توسعه ری اکت بعد از انتشار نسخه 17 و انتقاداتی که بهش وارد شد ، برگ آخرش رو…
#React17
#قسمت2
🔹بالخره بعد این مقدمه طولانی میرسیم سر اصل مطلب و اون هدیه کریسمسی تیم توسعه ری اکت به توسعه دهندگانشه ! و اون هم چیزی نیست جز Server Components !!
تیم توسعه ری اکت بعد از انتشار نسخه 17 و انتقاداتی که بهش وارد شد ، برگ آخرش رو…
#Indexer
#Params
#cSharp
🔰Indexer & Params IN C#
🔸ایندکسر ها در سی شارپ این اجازه را به اشیاء کلاس ها و struct ها میدهند تا مانند آرایه ها index گذاری شوند .
🔹از کاربردهای مهمی که میتوان از indexer ها استفاده کرد. encapsulate کردن کالکشن و یا یک آرایه داخلی در درون یک شء میباشد.
🔰Prams
🔸در c# هنگامی که پارامتر یک متد تعداد نامشخصی آرگومان (از یک نوع تایپ) دارد از کلمه کلیدی params برای تعریف آن پارامتر استفاده میکنیم. کامپایلر با params مانند یک temporary array برخورد میکند و از آن برای دریافت پارامترهای پاس داده شده
توسط caller استفاده میکند.
❇️ در ادامه تکنیکی را معرفی میکنیم که به عنوان یک C# Developer خوب است بدانید.
🔹Indexers can use params
🔸همه ما روش معقول و معمول استفاده از ایندکسر ها را میدانیم و مثال های فراوانی که از کاربردهای آن ارائه شده قالبا و تمام به یک شکل میباشد
در این پست، کاربردی جالب و ترکیبی از ایندکسر و params را معرفی میکنیم که امیدواریم مفید واقع شود.
▪️تعریف یک ایندکسر :
و ایندکسر خود را بدین شکل بنویسیم
🔸همچنین میتوانید در یک کلاس از هر دو شکل تعریف ایندکسر در کنار هم استفاده کنید و بسته به تعداد arg های پاس داده شده خروجی متفاوتی دریافت میکنید.
مشاهده نمونه سورس.(حتما بررسی کنید😉)
@fullStackDevs
#Params
#cSharp
🔰Indexer & Params IN C#
🔸ایندکسر ها در سی شارپ این اجازه را به اشیاء کلاس ها و struct ها میدهند تا مانند آرایه ها index گذاری شوند .
🔹از کاربردهای مهمی که میتوان از indexer ها استفاده کرد. encapsulate کردن کالکشن و یا یک آرایه داخلی در درون یک شء میباشد.
🔰Prams
🔸در c# هنگامی که پارامتر یک متد تعداد نامشخصی آرگومان (از یک نوع تایپ) دارد از کلمه کلیدی params برای تعریف آن پارامتر استفاده میکنیم. کامپایلر با params مانند یک temporary array برخورد میکند و از آن برای دریافت پارامترهای پاس داده شده
توسط caller استفاده میکند.
❇️ در ادامه تکنیکی را معرفی میکنیم که به عنوان یک C# Developer خوب است بدانید.
🔹Indexers can use params
🔸همه ما روش معقول و معمول استفاده از ایندکسر ها را میدانیم و مثال های فراوانی که از کاربردهای آن ارائه شده قالبا و تمام به یک شکل میباشد
در این پست، کاربردی جالب و ترکیبی از ایندکسر و params را معرفی میکنیم که امیدواریم مفید واقع شود.
▪️تعریف یک ایندکسر :
public string this[string key] {🔹اما ایا میدانید می توانیم از params هم در هنگام تعریف ایندکسر استفاده کنیم ؟
get { return internalDictionary[key]; }
}
و ایندکسر خود را بدین شکل بنویسیم
public IEnumerable<string> this[params string[] keys] {
get { return keys.Select(key => internalDictionary[key]).AsEnumerable(); }
}
🔸همچنین میتوانید در یک کلاس از هر دو شکل تعریف ایندکسر در کنار هم استفاده کنید و بسته به تعداد arg های پاس داده شده خروجی متفاوتی دریافت میکنید.
مشاهده نمونه سورس.(حتما بررسی کنید😉)
@fullStackDevs
GitHub
fullStackDevsGroup/IndexerAndParams
Contribute to fullStackDevsGroup/IndexerAndParams development by creating an account on GitHub.
#Lighthouse
#GoogleTool
⚙️ ابزار Google Lighthouse (فانوس دریایی گوگل)
🔻موبایل پسند بودن سایت و سرعت آن، دو تا از مهمترین پارامترهای سایت هستند که سئوکاران، توسعه دهندگان و صاحبین سایت ها می بایست به آنها توجه ویژه ای کنند.
اندازه گیری سرعت سایت همواره کمی مبهم بوده و اغلب ابزارهایی که در اینترنت برای تست این پارامتر وجود دارند، به اندازه کافی دقیق نیستند.
🌀 ابزار Google Lighthouse چیست؟
🔸فانوس دریایی ( Lighthouse ) ابزاریست متن باز که توسط گوگل و با هدف رسیدگی به اپلیکیشن های تحت وب (PWA) ساخته شده است. این ابزار تست دسترسی، کارایی، PWA و موارد بیشتر دیگری را اجرا می کند. این گزارش اجمالی، دید خوبی از کیفیت و کارایی وبسیات یا اپلیکیشن تحت وب شما می دهد.
🔹بسیاری از کاربران اینترنت در جهان همچنان از سرعت های اینترنت پایین استفاده می کنند و حتی ممکن است سرعت سایت شما در اینترنت های بسیار پر سرعت نیز دارای کمی تاخیر باشد. حتی کم کردن چند میلی ثانیه از زمان بارگذاری سایت، می تواند تفاوت بسیار زیادی ایجاد کند.
ابزار فانوس دریایی گوگل در تست خود، مشاهده سایت شما را با یک اینترنت کم سرعت و در یک دستگاه با قدرت پایین تر از استاندارد شبیه سازی می کند.
🔸 بعد از انجام تست، گزارشی مبنی بر امتیاز قسمت های مختلف و توصیه های متناسب با رفع مشکلات سایت به شما ارائه می گردد. در مقایسه با ابزار Test My Site گوگل، این ابزار زیبایی کمتری دارد، اما جامعتر می باشد.
@fullStackDevs
#GoogleTool
⚙️ ابزار Google Lighthouse (فانوس دریایی گوگل)
🔻موبایل پسند بودن سایت و سرعت آن، دو تا از مهمترین پارامترهای سایت هستند که سئوکاران، توسعه دهندگان و صاحبین سایت ها می بایست به آنها توجه ویژه ای کنند.
اندازه گیری سرعت سایت همواره کمی مبهم بوده و اغلب ابزارهایی که در اینترنت برای تست این پارامتر وجود دارند، به اندازه کافی دقیق نیستند.
🌀 ابزار Google Lighthouse چیست؟
🔸فانوس دریایی ( Lighthouse ) ابزاریست متن باز که توسط گوگل و با هدف رسیدگی به اپلیکیشن های تحت وب (PWA) ساخته شده است. این ابزار تست دسترسی، کارایی، PWA و موارد بیشتر دیگری را اجرا می کند. این گزارش اجمالی، دید خوبی از کیفیت و کارایی وبسیات یا اپلیکیشن تحت وب شما می دهد.
🔹بسیاری از کاربران اینترنت در جهان همچنان از سرعت های اینترنت پایین استفاده می کنند و حتی ممکن است سرعت سایت شما در اینترنت های بسیار پر سرعت نیز دارای کمی تاخیر باشد. حتی کم کردن چند میلی ثانیه از زمان بارگذاری سایت، می تواند تفاوت بسیار زیادی ایجاد کند.
ابزار فانوس دریایی گوگل در تست خود، مشاهده سایت شما را با یک اینترنت کم سرعت و در یک دستگاه با قدرت پایین تر از استاندارد شبیه سازی می کند.
🔸 بعد از انجام تست، گزارشی مبنی بر امتیاز قسمت های مختلف و توصیه های متناسب با رفع مشکلات سایت به شما ارائه می گردد. در مقایسه با ابزار Test My Site گوگل، این ابزار زیبایی کمتری دارد، اما جامعتر می باشد.
@fullStackDevs
Chrome for Developers
Introduction to Lighthouse | Chrome for Developers
Learn how to set up Lighthouse to audit your web apps.
#Vuejs
#ComponentLifeCycleHook
#سوال
🔰چگونه Hook های Child Component را در کامپوننت Parent صدا بزنیم؟
🔸در ویو جی اس به صورت معمولی برای اجرای کدی در زمان صدا زده شدن Hook های کامپوننت Child از روش زیر استفاده میکنیم.
🔹روش نرمال انجام این هدف، emit کردن یک Custom Event در کامپوننت child و Bind کردن یک متد به این Custom Event در کامپوننت Parent است، و بدین تصورت میتوانیم کد مد نظر خودمان را در هنگام صدا شده شدن Hook مربوطه کامپوننت Child اجرا کنیم.
🔹به عوان مثال می خواهیم قطعه کد X در زمانی که Hook mounted کامپوننت Child صدا زده شد، اجرا شود.
@fullStackDevs
#ComponentLifeCycleHook
#سوال
🔰چگونه Hook های Child Component را در کامپوننت Parent صدا بزنیم؟
🔸در ویو جی اس به صورت معمولی برای اجرای کدی در زمان صدا زده شدن Hook های کامپوننت Child از روش زیر استفاده میکنیم.
🔹روش نرمال انجام این هدف، emit کردن یک Custom Event در کامپوننت child و Bind کردن یک متد به این Custom Event در کامپوننت Parent است، و بدین تصورت میتوانیم کد مد نظر خودمان را در هنگام صدا شده شدن Hook مربوطه کامپوننت Child اجرا کنیم.
🔹به عوان مثال می خواهیم قطعه کد X در زمانی که Hook mounted کامپوننت Child صدا زده شد، اجرا شود.
`<!-- Child -->
<script>
export default {
mounted () {
this.$emit('onMounted') }
}
</script><!-- Parent -->
<template>
<Child @
onMounted="handleOnMounted" />
</template>`
❇️ اما راه حل ساده و جایگزین دیگری نیز وجود دارد برای این کار کافیست به این شکل عمل کنید :`<!-- Parent -->
<template>
<Child
@hook:mounted="handleOnMounted" />
</template>`
🔸در نتیجه handleOnMounted
در زمان call شدن هوک مشخص شده اجرا میشود.@fullStackDevs
#csharp
#Enums
❇️در این پست مورد جالبی را در مورد Enum ها برررسی میکنیم.
🔸آیا می دانستید که میتوانیم برای Enum ها Extension method بنویسیم؟
▫️پاسخ سوال واضح است. مشخصا بله .
🔹اما اگر بخواهیم فقط برای یک enum خاص یک Extension method بنویسیم و در سایر Enum ها قابل دسترس نباشد چه ⁉️
❇️ در این پست به بررسی این موضوع میپردازیم و در نهایت پاسخ سوال را ارائه می کنیم.
🔰همانطور که میدانید Extension متد ها راهی برای نوشتن و افزودن متدهای جدید به یک type از پیش ساخته شده، یا یک type سفارشی، بدون تغییر
در آن type است.
درواقع enum ها نوع خاصی از کلاس ها هستند که گروهی از constant ها را نمایش میدهند. پس دور از انتظار نیست که به این صورت برایشان Extention method بنویسیم.
@fullStackDevs
#Enums
❇️در این پست مورد جالبی را در مورد Enum ها برررسی میکنیم.
🔸آیا می دانستید که میتوانیم برای Enum ها Extension method بنویسیم؟
▫️پاسخ سوال واضح است. مشخصا بله .
🔹اما اگر بخواهیم فقط برای یک enum خاص یک Extension method بنویسیم و در سایر Enum ها قابل دسترس نباشد چه ⁉️
❇️ در این پست به بررسی این موضوع میپردازیم و در نهایت پاسخ سوال را ارائه می کنیم.
🔰همانطور که میدانید Extension متد ها راهی برای نوشتن و افزودن متدهای جدید به یک type از پیش ساخته شده، یا یک type سفارشی، بدون تغییر
در آن type است.
درواقع enum ها نوع خاصی از کلاس ها هستند که گروهی از constant ها را نمایش میدهند. پس دور از انتظار نیست که به این صورت برایشان Extention method بنویسیم.
enum Duration { Day, Week, Month };
static class DurationExtensions {
public static DateTime From(this Duration duration, DateTime dateTime) {
switch(duration) {
case Day: return dateTime.AddDays(1);
case Week: return dateTime.AddDays(7);
case Month: return dateTime.AddMonths(1);
default: throw new ArgumentOutOfRangeException("duration");
}
}
}
▪️و بدین صورت متد From فقط برای enum Duration قابل دسترسی خواهد بود.@fullStackDevs
#github1s
🎯 github1s
▫️ یک ثانیه برای خواندن کدهای GitHub با VSCode
▪️ در نوار آدرس پس از github فقط s1 اضافه کرده و Enter را در نوار آدرس مرورگر فشار دهید تا مخزنی را که می خواهید بخوانید.
برای مثال لینک زیر را ببینید .
https://github1s.com/microsoft/vscode
@fullStackDevs
🎯 github1s
▫️ یک ثانیه برای خواندن کدهای GitHub با VSCode
▪️ در نوار آدرس پس از github فقط s1 اضافه کرده و Enter را در نوار آدرس مرورگر فشار دهید تا مخزنی را که می خواهید بخوانید.
برای مثال لینک زیر را ببینید .
https://github1s.com/microsoft/vscode
@fullStackDevs
#trick
#tips
سایت زدین برای مشتری، ولی پولش رو نمیده؟ این پلاگین رو به سایت اضافه کنین.
یک dead line تعریف میکنید مثلاً 90 روز. بعد به ازای هر روز یک واحد از opacity سایت کم میشه و نهایتاً بعد از 90 روز opacity به صفر میرسه و سایت کلاً محو میشه .
✍️ Ali Nazari
@fullStackDevs
#tips
سایت زدین برای مشتری، ولی پولش رو نمیده؟ این پلاگین رو به سایت اضافه کنین.
یک dead line تعریف میکنید مثلاً 90 روز. بعد به ازای هر روز یک واحد از opacity سایت کم میشه و نهایتاً بعد از 90 روز opacity به صفر میرسه و سایت کلاً محو میشه .
✍️ Ali Nazari
@fullStackDevs
Forwarded from Web Devs
#DI
#Ioc
#DIP
#SOLID
✳️ Captive Dependency
🔹 در این پست به توضیح مشکلی میپردازیم که معمولا به دلیل اشتباه کانفیگ کردن سرویس های اپلیکیشن در IOC Container رخ میدهد.
🔸 تزریق وابستگی (Dependency Injection) از مفاهیم مهمی هست که باید به آن آشنا باشیم. برای استفاده از این مفهوم و مفاهیم مرتبط با آن مثل IOC ,DIP
در اپلیکیشن، ابزار ها یا فریم وورک هایی وجود دارند که به آنها IOC Container می گوییم.
🔻اگر با DI و IOC و DIP آشنا نیستید مقالات لینک شده را مطالعه کنید.
🔸مدیریت lifeTime سرویس های اپلیکیشن امری است که به کمک IOC Container مقدر میشود اما وظیفه register کردن و معرفی کردن وابستگی ها به IOC Container بر عهده Developer میباشد.
🔸 اشتباه کانفیگ کردن lifeTime برای سرویسی در اپلیکیشن، که خود دارای وابستگی هایی، با lifeTime ای کمتر از lifeTime سرویس اصلی هستند، باعث به وجود آمد مشکل Captive Dependency میشود.
🔹 برای درک مسئله به مثال زیر توجه کنید
فرض کنید دو کلاس با نام های
ScopedDependency
SingletonDependency
داریم.
🔸 همانطور که از نام ها مشخص است کلاس SingletonDependency به صورت Singleton به DI Contaner معرفی شده و در طول عمر اپلیکیشن فقط یک نمونه از آن ساخته میشود.
🔸 کلاس ScopedDependency هم به صورت Scoped در IOC Container معرفی شده و به ازای هر connection به سرور فقط یک نمونه از آن به ازای هر کانکشن و درخواست ساخته میشود.
🔸 بیایید فرض کنیم که چه اتفاقی می افتد اگر کلاس SingletonDependency برای انجام برخی کارها در درون خود به کلاس ScopedDependency وابسته باشد و ما نیاز داشته باشیم که کلاس ScopedDependency در درون آن تزریق کنیم.
🔹 با رجیستر کردن کلاس ScopedDependency بصورت Scoped انتظار این است که روند نمونه سازی از این کلاس Scoped گونه باشد. اما وقتی این کلاس را در یک کلاس دیگر که به صورت Singleton رجیستر شده است تزریق میکنید، قوائد بازی را برهم زده و باعث میشوید که کلاس Singleton مورد نظر در تمام طول عمر خود فقط از یک نمونه قدیمی از وابستگی خود استفاده کند. این نمونه قدیمی برای اولین بار در هنگام ساخته شدن کلاس Singleton ای که در درون آن وجود دارد ساخته شده و به زندگی خود به لطف حضور در یک کلاس Singleton ادامه میدهد.
پس در نتیجه برای SingletonDepedency ما فقط یک نمونه از ScopedDependency ساخته میشود و در تمام طول عر خود از همان نمونه قدیمی استفاده میکند.
🔸در نگاه اول شاید این مشکل حاد به نظر نرسد اما باید بدانید که در یک پروژه که پیچیدگی های خاص خود را دارد باعث بروز مشکلات و باگ های فاحش خواهد شد.
🔸 این مشکل توسط Developer با اشتباه کانفیگ کردن lifeTime برای سرویس های اپلیکیشن رخ میدهد و حتی IOC Container هایی مانند Autofac نمی توانند از آن جلوگیری کنند.
اما IOC Container پیشفرض Asp.Net Core سعی کرده است تا حدی از این مشکل جلوگیری کند.
🔸 فعال سازی این ویژگی برای IOC Container پیشفرض اختیاری بوده و در صورت فعال سازی آن، نکته ای که باعث بهبود performance میشود این است که فقط در محیط و هنگام Development از آن استفاده کنید.
🔻همچنین باید بدانید که این ویژگی فقط از بروز Captive Dependency برای سرویس هایی که به صورت Scoped رجیستر شده اند، جلوگیری میکند و باعث صادر شدن استثنای InvalidOperationException میشود. و برای سرویس های که به صورت Transient رجیستر شده اند کار نمیکند.
❇️ برای فعال سازی این ویژگی در کلاس Program بدین شکل عمل کنید.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseDefaultServiceProvider((env, c) =>
{
if (env.HostingEnvironment.IsDevelopment())
{
c.ValidateScopes = true;
}
});
}
@FullStackDevs
#Ioc
#DIP
#SOLID
✳️ Captive Dependency
🔹 در این پست به توضیح مشکلی میپردازیم که معمولا به دلیل اشتباه کانفیگ کردن سرویس های اپلیکیشن در IOC Container رخ میدهد.
🔸 تزریق وابستگی (Dependency Injection) از مفاهیم مهمی هست که باید به آن آشنا باشیم. برای استفاده از این مفهوم و مفاهیم مرتبط با آن مثل IOC ,DIP
در اپلیکیشن، ابزار ها یا فریم وورک هایی وجود دارند که به آنها IOC Container می گوییم.
🔻اگر با DI و IOC و DIP آشنا نیستید مقالات لینک شده را مطالعه کنید.
🔸مدیریت lifeTime سرویس های اپلیکیشن امری است که به کمک IOC Container مقدر میشود اما وظیفه register کردن و معرفی کردن وابستگی ها به IOC Container بر عهده Developer میباشد.
🔸 اشتباه کانفیگ کردن lifeTime برای سرویسی در اپلیکیشن، که خود دارای وابستگی هایی، با lifeTime ای کمتر از lifeTime سرویس اصلی هستند، باعث به وجود آمد مشکل Captive Dependency میشود.
🔹 برای درک مسئله به مثال زیر توجه کنید
فرض کنید دو کلاس با نام های
ScopedDependency
SingletonDependency
داریم.
🔸 همانطور که از نام ها مشخص است کلاس SingletonDependency به صورت Singleton به DI Contaner معرفی شده و در طول عمر اپلیکیشن فقط یک نمونه از آن ساخته میشود.
🔸 کلاس ScopedDependency هم به صورت Scoped در IOC Container معرفی شده و به ازای هر connection به سرور فقط یک نمونه از آن به ازای هر کانکشن و درخواست ساخته میشود.
🔸 بیایید فرض کنیم که چه اتفاقی می افتد اگر کلاس SingletonDependency برای انجام برخی کارها در درون خود به کلاس ScopedDependency وابسته باشد و ما نیاز داشته باشیم که کلاس ScopedDependency در درون آن تزریق کنیم.
🔹 با رجیستر کردن کلاس ScopedDependency بصورت Scoped انتظار این است که روند نمونه سازی از این کلاس Scoped گونه باشد. اما وقتی این کلاس را در یک کلاس دیگر که به صورت Singleton رجیستر شده است تزریق میکنید، قوائد بازی را برهم زده و باعث میشوید که کلاس Singleton مورد نظر در تمام طول عمر خود فقط از یک نمونه قدیمی از وابستگی خود استفاده کند. این نمونه قدیمی برای اولین بار در هنگام ساخته شدن کلاس Singleton ای که در درون آن وجود دارد ساخته شده و به زندگی خود به لطف حضور در یک کلاس Singleton ادامه میدهد.
پس در نتیجه برای SingletonDepedency ما فقط یک نمونه از ScopedDependency ساخته میشود و در تمام طول عر خود از همان نمونه قدیمی استفاده میکند.
🔸در نگاه اول شاید این مشکل حاد به نظر نرسد اما باید بدانید که در یک پروژه که پیچیدگی های خاص خود را دارد باعث بروز مشکلات و باگ های فاحش خواهد شد.
🔸 این مشکل توسط Developer با اشتباه کانفیگ کردن lifeTime برای سرویس های اپلیکیشن رخ میدهد و حتی IOC Container هایی مانند Autofac نمی توانند از آن جلوگیری کنند.
اما IOC Container پیشفرض Asp.Net Core سعی کرده است تا حدی از این مشکل جلوگیری کند.
🔸 فعال سازی این ویژگی برای IOC Container پیشفرض اختیاری بوده و در صورت فعال سازی آن، نکته ای که باعث بهبود performance میشود این است که فقط در محیط و هنگام Development از آن استفاده کنید.
🔻همچنین باید بدانید که این ویژگی فقط از بروز Captive Dependency برای سرویس هایی که به صورت Scoped رجیستر شده اند، جلوگیری میکند و باعث صادر شدن استثنای InvalidOperationException میشود. و برای سرویس های که به صورت Transient رجیستر شده اند کار نمیکند.
❇️ برای فعال سازی این ویژگی در کلاس Program بدین شکل عمل کنید.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseDefaultServiceProvider((env, c) =>
{
if (env.HostingEnvironment.IsDevelopment())
{
c.ValidateScopes = true;
}
});
}
@FullStackDevs
#javaScript_tricks
#js
❇️ در این پست چندتا تکنیک جاوا اسکریپتی معرفی میکنیم که امیداوریم براتون مفید واقع بشه.
🔹لاگ سریع در console به کمک object literal میتونید متغیرهاتون رو خیلی سریع و خوانا لاگ بزنید.
به این ترتیب یه آبجکت میسازین و مقدار هر پراپرتیش به همراه نامش در کنسول لاگ میشه.
🔹نمایش نام پارامترهای تابع به همراه تایپ شون.
به کمک object destructuring در جاوا اسکریپت و مشخص کردن مقدار پیشفرض برای پارامتر های تابع میتونید موقع صدا زدن تابع نام پارامتر ها به همراه تایپ اونها رو داشته باشید و از آنجایی که به پارامترتون مقدار پیشفرض دادید به صورت optional هست و به شکل های متفاوت میتونید تابع تون رو صدا بزنید.
از اونجایی که ارایه ها با رفرنسشون پاس داده میشن به کمک spread operator میتونید یک آرایه رو به راحتی کلون کنید.
به کمک مقدار دهی پیشفرض برای پارامترهای تابع و به کمک این تکنیک میتونید پارامترهای توابع تون رو درصورتی که مقداری براشون پاس داده نشده اجباری کنید.
دیگر لایبری های رایج جاوااسکریپتی مثل jquery ajax و axios این امکان رو بهتون میدن تا برای درخواستتون یک timeout تنظیم کنین و درصورتی که در زمان مشخص شده رکوئست انجام نشد، خودکار fail بشه.
متد fetch در مرورگر های جدید به صورت توکار چنین قابلیتی رو نداره اما به کمک این تکنیک میتونید اینکار رو انجام بدید.
.then((response) => {
// successful response before the 1 s timeout
console.log('successful response', response)
})
.catch((e) => {
// Either the timeout occurred or some other error.
// Would need to check the method or use a custom
//
})
🔹تبدیل رشته به عدد .
برای تبدیل رشته های عددی به معادل number ای شون از این تکنیک استفاده کنید.
@fullStackDevs
#js
❇️ در این پست چندتا تکنیک جاوا اسکریپتی معرفی میکنیم که امیداوریم براتون مفید واقع بشه.
🔹لاگ سریع در console به کمک object literal میتونید متغیرهاتون رو خیلی سریع و خوانا لاگ بزنید.
const myVar = 'foo'
const otherVar = 2
// output:
// {myVar: "foo", otherVar: 2}
console.log({ myVar, otherVar })به این ترتیب یه آبجکت میسازین و مقدار هر پراپرتیش به همراه نامش در کنسول لاگ میشه.
🔹نمایش نام پارامترهای تابع به همراه تایپ شون.
به کمک object destructuring در جاوا اسکریپت و مشخص کردن مقدار پیشفرض برای پارامتر های تابع میتونید موقع صدا زدن تابع نام پارامتر ها به همراه تایپ اونها رو داشته باشید و از آنجایی که به پارامترتون مقدار پیشفرض دادید به صورت optional هست و به شکل های متفاوت میتونید تابع تون رو صدا بزنید.
const notify = (msg, { type = 'info', timeout, close = true } = {}) => {🔹کلون کردن آرایه.
// display notification
}
notify('Hi!')
notify('Hi!', { type: 'error' })
notify('Hi!', { type: 'warn', close: false })
از اونجایی که ارایه ها با رفرنسشون پاس داده میشن به کمک spread operator میتونید یک آرایه رو به راحتی کلون کنید.
const manipulateList = (list) => {
// defensively copy list
const copiedList = [
...list]
// do something with copiedList
}
🔹 اجباری کردن پارامترهای تابعبه کمک مقدار دهی پیشفرض برای پارامترهای تابع و به کمک این تکنیک میتونید پارامترهای توابع تون رو درصورتی که مقداری براشون پاس داده نشده اجباری کنید.
const throwIfMissing = () => {
throw new Error('Missing parameter')
}
const func = (requiredParam = throwIfMissing()) => {
// some implementation
}
🔹رکوئست های زماندار (برای fetch api)دیگر لایبری های رایج جاوااسکریپتی مثل jquery ajax و axios این امکان رو بهتون میدن تا برای درخواستتون یک timeout تنظیم کنین و درصورتی که در زمان مشخص شده رکوئست انجام نشد، خودکار fail بشه.
متد fetch در مرورگر های جدید به صورت توکار چنین قابلیتی رو نداره اما به کمک این تکنیک میتونید اینکار رو انجام بدید.
const timeout = (delay = 30000) => {
return new Promise((resolve, reject) => {
const rejectWithError = () => {
reject(new Error('Timed out!'))
}
setTimeout(
rejectWithError, delay)
})
}
const fetchWithTimeout = (url, delay = 3000) => {
// construct an array to pass to `Promise.race`
return Promise.race([fetch(url),
timeout(delay)])
}
fetchWithTimeout('/json/data.json', 1000).then((response) => {
// successful response before the 1 s timeout
console.log('successful response', response)
})
.catch((e) => {
// Either the timeout occurred or some other error.
// Would need to check the method or use a custom
//
Error
subclass in timeout
console.error('request error', e)})
🔹تبدیل رشته به عدد .
برای تبدیل رشته های عددی به معادل number ای شون از این تکنیک استفاده کنید.
let int = "15";
int =
+int;
اگر جایی امکان استفاده از عملگر + نداشتید از دوتا عملگر ~~ استفاده کنید.@fullStackDevs
Forwarded from Web Devs
#multithread
#multitask
#thread
#task
#async
✳️ Multitasking vs Multithreading
🔻آیا تا به حال مدت ها منتظر کسی یا کاری بوده اید ، در حالی که هیچ کاری انجام نمی دهید و فکر می کنید که می توانستید کار دیگری انجام دهید؟ این زمانی است که اهمیت multithreading را درک می کنید. انتظار وقتی آسانتر می شود که بتوانید کارهای دیگری را انجام دهید در حالی که منتظر کسی یا چیز دیگری هستید. برای روشن تر شدن مفهوم چند وظیفه ای ، مادر خود را در نظر بگیرید. از زمان به دنیا آمدن ، من مادرم را دیده ام که همزمان چندین کار را انجام می دهد و همیشه تعجب می کنم که او چگونه این کار را انجام می دهد؟ او خانه را تمیز می کند ، لباس های می شوید و همزمان غذا را آماده می کند.
▪️در برنامه نویسی ، شما با وضعیت های بسیاری روبرو میشوید که مجبور می شوید از multithreading و multitasking استفاده کنید.
به عنوان مثال ، هنگام خواندن یک file بزرگ ، بهتر است به کاربر اجازه دهید کارهای دیگری انجام دهد. از این رو ، چه تفاوتی بین multithreading و multitasking وجود دارد؟ آیا آنها یکسان هستند؟
🔸Multitasking
به این معنی است که به کاربر اجازه می دهد چندین task را همزمان انجام دهد. کاربر می تواند ضمن نوشتن یک وبلاگ ، به موسیقی در حال اجرا در پس زمینه گوش دهد. بنابراین کامپیوتر چندین کار را برای کاربر انجام می دهد. هر task به منابع نیاز دارد. از آنجا که کامپیوتر از منابع محدودی برخوردار است ، تعداد کارهای انجام شده در همان زمان نیز محدود است.
🔹Multithreading
ترد ها مربوط به بالاترین سطح کد اجرا شده توسط یک پردازنده هستند ، بنابراین با بسیاری از تردها، سی پی یو شما می تواند همزمان چندین کار را انجام دهد. تمام CPU ها تردهای فعال دارند و هر فرایندی که در رایانه شما انجام می شود حداقل یک ترد واحد دارد.
ترد برای انجام task های متعدد استفاده می شود. هر task می تواند چندین thread داشته باشد. در یک برنامه multithreaded کاربر می تواند در مدت زمان کوتاتر نسبت به یک برنامه single thread کارهای بیشتری انجام دهد. امروزه تقریباً در هر برنامه
از multiple threading استفاده شده است. یک برنامه یا یک process می تواند یک user interface thread داشته باشد که در تعامل با کاربر باشد
و background worker threads که کارهای دیگری را انجام می دهند.
🔵 حال می بینیم که چگونه multithreading و multitasking در C # کار می کند.
▪️یک task چیزی است که شما می خواهید انجام شود. ترد یکی از موارد ممکن است که آن task را انجام میدهد.
▫️در دات نت Task یک عملیات واحد را نشان می دهد و معمولاً بصورت غیر همزمان (asynchronous) انجام می شود.
▪️تسک آبجکت Task Object ها یکی از کامپوننت های اصلی task-based asynchronous pattern است که برای اولین بار در .NET Framework 4 معرفی شده است.
▫️ کارهایی که توسط یک task انجام می شود به طور معمول بصورت غیر همزمان برروی
یک thread از threadpool اجرا می شود. تسک ها برای پردازنده های چند هسته ای تنظیم شده اند.
▪️تسک Task ها توسط task library تنظیم می شوند تا از thread های threadpool به روشی بسیار کارآمدتر از زمانی که خود از thread استفاده میکنید ،استفاده میکند.
ایجاد thread بسیار گران است ، Task ها صف خواهند شد و از thread ها استفاده مجدد میشود. بنابراین هنگامی که مثلا از یک thread در انتظار network I/O است ، در واقع می توان از آن برای اجرای یک کار دیگر استفاده کرد. شما فقط می توانید تعداد thread هایی را که با تعداد هسته پردازنده شما مطابقت دارد ، اجرا کنید (به طور همزمان)
همیشه سعی کنید از task استفاده کنید و اگر با مشکلی روبرو هستید که باعث می شود خودتان بخواهید thread را کنترل کنید (احتمالاً 1٪) سپس از thread ها استفاده کنید.
@fullStackDevs
#multitask
#thread
#task
#async
✳️ Multitasking vs Multithreading
🔻آیا تا به حال مدت ها منتظر کسی یا کاری بوده اید ، در حالی که هیچ کاری انجام نمی دهید و فکر می کنید که می توانستید کار دیگری انجام دهید؟ این زمانی است که اهمیت multithreading را درک می کنید. انتظار وقتی آسانتر می شود که بتوانید کارهای دیگری را انجام دهید در حالی که منتظر کسی یا چیز دیگری هستید. برای روشن تر شدن مفهوم چند وظیفه ای ، مادر خود را در نظر بگیرید. از زمان به دنیا آمدن ، من مادرم را دیده ام که همزمان چندین کار را انجام می دهد و همیشه تعجب می کنم که او چگونه این کار را انجام می دهد؟ او خانه را تمیز می کند ، لباس های می شوید و همزمان غذا را آماده می کند.
▪️در برنامه نویسی ، شما با وضعیت های بسیاری روبرو میشوید که مجبور می شوید از multithreading و multitasking استفاده کنید.
به عنوان مثال ، هنگام خواندن یک file بزرگ ، بهتر است به کاربر اجازه دهید کارهای دیگری انجام دهد. از این رو ، چه تفاوتی بین multithreading و multitasking وجود دارد؟ آیا آنها یکسان هستند؟
🔸Multitasking
به این معنی است که به کاربر اجازه می دهد چندین task را همزمان انجام دهد. کاربر می تواند ضمن نوشتن یک وبلاگ ، به موسیقی در حال اجرا در پس زمینه گوش دهد. بنابراین کامپیوتر چندین کار را برای کاربر انجام می دهد. هر task به منابع نیاز دارد. از آنجا که کامپیوتر از منابع محدودی برخوردار است ، تعداد کارهای انجام شده در همان زمان نیز محدود است.
🔹Multithreading
ترد ها مربوط به بالاترین سطح کد اجرا شده توسط یک پردازنده هستند ، بنابراین با بسیاری از تردها، سی پی یو شما می تواند همزمان چندین کار را انجام دهد. تمام CPU ها تردهای فعال دارند و هر فرایندی که در رایانه شما انجام می شود حداقل یک ترد واحد دارد.
ترد برای انجام task های متعدد استفاده می شود. هر task می تواند چندین thread داشته باشد. در یک برنامه multithreaded کاربر می تواند در مدت زمان کوتاتر نسبت به یک برنامه single thread کارهای بیشتری انجام دهد. امروزه تقریباً در هر برنامه
از multiple threading استفاده شده است. یک برنامه یا یک process می تواند یک user interface thread داشته باشد که در تعامل با کاربر باشد
و background worker threads که کارهای دیگری را انجام می دهند.
🔵 حال می بینیم که چگونه multithreading و multitasking در C # کار می کند.
▪️یک task چیزی است که شما می خواهید انجام شود. ترد یکی از موارد ممکن است که آن task را انجام میدهد.
▫️در دات نت Task یک عملیات واحد را نشان می دهد و معمولاً بصورت غیر همزمان (asynchronous) انجام می شود.
▪️تسک آبجکت Task Object ها یکی از کامپوننت های اصلی task-based asynchronous pattern است که برای اولین بار در .NET Framework 4 معرفی شده است.
▫️ کارهایی که توسط یک task انجام می شود به طور معمول بصورت غیر همزمان برروی
یک thread از threadpool اجرا می شود. تسک ها برای پردازنده های چند هسته ای تنظیم شده اند.
▪️تسک Task ها توسط task library تنظیم می شوند تا از thread های threadpool به روشی بسیار کارآمدتر از زمانی که خود از thread استفاده میکنید ،استفاده میکند.
ایجاد thread بسیار گران است ، Task ها صف خواهند شد و از thread ها استفاده مجدد میشود. بنابراین هنگامی که مثلا از یک thread در انتظار network I/O است ، در واقع می توان از آن برای اجرای یک کار دیگر استفاده کرد. شما فقط می توانید تعداد thread هایی را که با تعداد هسته پردازنده شما مطابقت دارد ، اجرا کنید (به طور همزمان)
همیشه سعی کنید از task استفاده کنید و اگر با مشکلی روبرو هستید که باعث می شود خودتان بخواهید thread را کنترل کنید (احتمالاً 1٪) سپس از thread ها استفاده کنید.
@fullStackDevs
#GitHub
#CustomAction
How to Create a Custom GitHub Action with Node
Extensive notes (and a 15-minute screencast) on building your own custom action for GitHub’s Actions CI/CD system – specifically in this case to give thanks on new pull requests. - http://amp.gs/Q33A
#nodejs
#CustomAction
How to Create a Custom GitHub Action with Node
Extensive notes (and a 15-minute screencast) on building your own custom action for GitHub’s Actions CI/CD system – specifically in this case to give thanks on new pull requests. - http://amp.gs/Q33A
#nodejs
Space Jelly
How to Create a Custom GitHub Action with Node & JavaScript
Read How to Create a Custom GitHub Action with Node & JavaScript at Space Jelly.
Forwarded from Web Devs
#exploring
#static
#Readonly
✳️Const vs Readonly Static
🔹Const
▫️متغیرهایی که به صورت Constant تعریف میشوند باید در هنگام تعریفشان مقدار دهی شوند و دیگر در طی طول عمر برنامه قابل تغییر نیستند. تنها type های داخلی سی شارپ را میتوان به
صورت Constant تعریف کرد. به استثنای (system.object).
تایپ های تعریف شده توسط کاربر شامل کلاس ها،struct ها و یا آرایه ها ، نمیتوانند به صورت Const تعریف شوند.
همچنین سی شارپ از متدها و پراپرتی ها و ایونت ها به صورت Const پشتیبانی نمیکند.
▪️مقادیر در متغیر های Const در
زمان compile-time شناخته و صدا زده میشوند.
▫️از Const زمانی استفاده کنید که مطمئن هستید مقدار یک متغیر در طی طول عمر اپلیکیشن تغییر نخواهد کرد.
هر متغیری که به صورت Const تعریف میشود به صورت غیر صریح static نیز تعریف خواهد شد.
▫️زمانی که کامپایلر با یک
متغیر Const مواجه میشود، مقدار آنرا مستقیما در کد IL تولید شده جایگزین میکند.
🔹Static
▫️یک عضو Static مانند : متغیرها ،متد ها و ... به Type شی تعلق دارند و از طریق نام Type در دسترس خواهد بود.
🔹ReadOnly
▫️یک فیلد ReadOnly در
زمان run-time مقدار آن ارزیابی میشود.به یک فیلد ReadOnly فقط در زمان تعریف و یا در متد سازنده کلاس دربردارنده آن میتوانید مقدار اختصاص دهید.در نتیجه این را میتوان استنباط کرد که می توان برای یک
فیلد ReadOnly در متدهای سازنده مختلف مقادیر متفاوت اختصاص داد.
🔸از اختصاص دادن مقادیر به یک فیلد Readonly برای value type ها
و reference type ها در متد سازنده چند نتیجه میتوان گرفت :
🔻در valueType ها از آنجایی که مستقیما شامل مقادیر خود هستند اگر یک فیلد به صورت ReadOnly تعریف شود immutable نیز خواهد بود.
🔻در referenceType ها که یک رفرنس به داده های خود هستند اگر یک
فیلد refrenceType
بصورت ReadOnly تعریف شود، همیشه باید به یک شی یکسان و از همان نوع اشاره کند و همچنین ReadOnly تعریف کردن آنها باعث جلوگیری از تغییر مقادیر فیلد های آن شی نمیشود.
▪️با این تعاریف به سوال اصلی خود باز میگردیم❕
❇️const vs static readonly
🔹اول از همه باید بدانیم که ویژگی های یک متغیر static readonly چیست⁉️
🔻در جایی غیر از متد سازنده static و یا در هنگام تعریف آن نمیتوانید به آن مقدار اختصاص دهید.(به خاطر readonly بودن آن)
🔻از طریق نام کلاس به آن دسترسی دارید (به خاطر static بودن آن)
🔹با این وجود در نگاه اول یک
متغیر static readonly به یک
متغیر const بسیار شبیه است زیرا یک constant فقط در هنگام تعریف می تواند مقدار بگیرد و در هیچ جای دیگری از کد مقدار آن نمیتواند تغییر کند اما تفاوت در جزئیات نهفته است.
اول از همه بدانید که یک متغیر const به جیزی ارجاع نمیکند (reference) و استفاده ار آن
به معنای hard code کردن مقدار آن میباشد .
✳️ علاوه بر اینها یک تفاوت کلیدی وجود دارد که باید از آن آگاه باشیم .همانطور که پیش تر گفتیم مقادیر یک متغیر const در کد IL جایگرین میشوند.
⚠️ اگر یک متغیر const در اسمبلی A وجود داشته باشد و اسمبلی B از اسمبلی A استفاده کند . اگر یک مقدار جدید به متغیر const موجود در اسمبلی A دهید و دوباره این اسمبلی را recompile کنید و تا زمانی که اسمبلی B را recompile نکرده اید، از همان مقدار قبلی hard code شده برای متغیر const موجود در اسمبلی A استفاده میکند.
خلاصه
🔻متغیرهای static readonly فقط میتوانند در لحظه تعریف شدن یا در متد سازنده static تغییر کنند.
🔻اگر مطمئن هستید و میدانید که مقدار یک متغیر تغییر نمیکند
از const استفاده کنید.
🔻اگر مطمئن نیستید که مقدار یک متغیر تغییر میکند یا خیر و نمیخواهید کلاس دیگری مقدار آنرا تغییر دهد
از read only استفاده کنید.
🔻متغیر های const به صورت غیر صریح static هستند.
🔻اگر میخواهید از طریق نام type به یک عضو آن دسترسی داشته باشید از static استفاده کنید.
منابع 🔍
1 - 2 -3 - 4 - 5 - 6
@FullStackDevs
#static
#Readonly
✳️Const vs Readonly Static
🔹Const
▫️متغیرهایی که به صورت Constant تعریف میشوند باید در هنگام تعریفشان مقدار دهی شوند و دیگر در طی طول عمر برنامه قابل تغییر نیستند. تنها type های داخلی سی شارپ را میتوان به
صورت Constant تعریف کرد. به استثنای (system.object).
تایپ های تعریف شده توسط کاربر شامل کلاس ها،struct ها و یا آرایه ها ، نمیتوانند به صورت Const تعریف شوند.
همچنین سی شارپ از متدها و پراپرتی ها و ایونت ها به صورت Const پشتیبانی نمیکند.
▪️مقادیر در متغیر های Const در
زمان compile-time شناخته و صدا زده میشوند.
▫️از Const زمانی استفاده کنید که مطمئن هستید مقدار یک متغیر در طی طول عمر اپلیکیشن تغییر نخواهد کرد.
هر متغیری که به صورت Const تعریف میشود به صورت غیر صریح static نیز تعریف خواهد شد.
▫️زمانی که کامپایلر با یک
متغیر Const مواجه میشود، مقدار آنرا مستقیما در کد IL تولید شده جایگزین میکند.
🔹Static
▫️یک عضو Static مانند : متغیرها ،متد ها و ... به Type شی تعلق دارند و از طریق نام Type در دسترس خواهد بود.
🔹ReadOnly
▫️یک فیلد ReadOnly در
زمان run-time مقدار آن ارزیابی میشود.به یک فیلد ReadOnly فقط در زمان تعریف و یا در متد سازنده کلاس دربردارنده آن میتوانید مقدار اختصاص دهید.در نتیجه این را میتوان استنباط کرد که می توان برای یک
فیلد ReadOnly در متدهای سازنده مختلف مقادیر متفاوت اختصاص داد.
🔸از اختصاص دادن مقادیر به یک فیلد Readonly برای value type ها
و reference type ها در متد سازنده چند نتیجه میتوان گرفت :
🔻در valueType ها از آنجایی که مستقیما شامل مقادیر خود هستند اگر یک فیلد به صورت ReadOnly تعریف شود immutable نیز خواهد بود.
🔻در referenceType ها که یک رفرنس به داده های خود هستند اگر یک
فیلد refrenceType
بصورت ReadOnly تعریف شود، همیشه باید به یک شی یکسان و از همان نوع اشاره کند و همچنین ReadOnly تعریف کردن آنها باعث جلوگیری از تغییر مقادیر فیلد های آن شی نمیشود.
▪️با این تعاریف به سوال اصلی خود باز میگردیم❕
❇️const vs static readonly
🔹اول از همه باید بدانیم که ویژگی های یک متغیر static readonly چیست⁉️
🔻در جایی غیر از متد سازنده static و یا در هنگام تعریف آن نمیتوانید به آن مقدار اختصاص دهید.(به خاطر readonly بودن آن)
🔻از طریق نام کلاس به آن دسترسی دارید (به خاطر static بودن آن)
🔹با این وجود در نگاه اول یک
متغیر static readonly به یک
متغیر const بسیار شبیه است زیرا یک constant فقط در هنگام تعریف می تواند مقدار بگیرد و در هیچ جای دیگری از کد مقدار آن نمیتواند تغییر کند اما تفاوت در جزئیات نهفته است.
اول از همه بدانید که یک متغیر const به جیزی ارجاع نمیکند (reference) و استفاده ار آن
به معنای hard code کردن مقدار آن میباشد .
✳️ علاوه بر اینها یک تفاوت کلیدی وجود دارد که باید از آن آگاه باشیم .همانطور که پیش تر گفتیم مقادیر یک متغیر const در کد IL جایگرین میشوند.
⚠️ اگر یک متغیر const در اسمبلی A وجود داشته باشد و اسمبلی B از اسمبلی A استفاده کند . اگر یک مقدار جدید به متغیر const موجود در اسمبلی A دهید و دوباره این اسمبلی را recompile کنید و تا زمانی که اسمبلی B را recompile نکرده اید، از همان مقدار قبلی hard code شده برای متغیر const موجود در اسمبلی A استفاده میکند.
خلاصه
🔻متغیرهای static readonly فقط میتوانند در لحظه تعریف شدن یا در متد سازنده static تغییر کنند.
🔻اگر مطمئن هستید و میدانید که مقدار یک متغیر تغییر نمیکند
از const استفاده کنید.
🔻اگر مطمئن نیستید که مقدار یک متغیر تغییر میکند یا خیر و نمیخواهید کلاس دیگری مقدار آنرا تغییر دهد
از read only استفاده کنید.
🔻متغیر های const به صورت غیر صریح static هستند.
🔻اگر میخواهید از طریق نام type به یک عضو آن دسترسی داشته باشید از static استفاده کنید.
منابع 🔍
1 - 2 -3 - 4 - 5 - 6
@FullStackDevs
#css
#frontEnd
#سی_اس_اس
🔰Css tricks
🔸با اینکه css آنقدرها پیچیده نیست، اما اگر تجربه ی زیادی هم در کار کردن با css داشته باشید باز هم چیزهای جدیدی هست که دانستن آن متعجب تون میکنه!
پراپرتی هایی که بسیار ازشون استفاده کردین بدون اینکه به جزئیاتش توجه خاصی کرده باشین، یا پراپرتی هایی که تاکنون ممکن است وجود آنها بی خبر بوده باشین.
🔹در این پست چندتا از این پراپرتی هارو میخوایم بررسی و معرفی کنیم.
❇️Color Property
🔹از این پراپرتی قائدتا بسیار استفاده کردین. (برای تغییر رنگ Text)
اما باید بدونید که این پراپرتی رنگ foreground المنت رو مشخص میکنه و فقط برای مشخص کردن رنگ text المنت نیست.
❇️visibility property
🔹از این پراپرتی هم حتما بسیار استفاده کرده اید و مقدار پیشفرض برای آن visible میباشد تفاوت آن با
display: none
این است که مرورگر در هنگام render المنتی که visibility آن hidden است فضای اشغال شده توسط المنت را در نظر میگیرد ولی المنت قابل رویت نمیباشد اما هنگامی که یک المنت display: none مرورگر در هنگام render صفحه هیچ فضایی برای المنت در نظر نمیگیرد.
پراپرتی visibility دارای مقداری دیگری برای set کردن به نام collapse میباشد. هنگامی که مقدار visibility المنتی را برابر با collapse قرار میدهید، مرورگر با آن المنت همانند حالت hidden عمل میکند، به استثنا در table rows و table row groups و table columns و table column groups در چنین مواقعی تنظیم کردن مقدار collapse برای یک المنت در table base المنت ها مانند display : none خواهد بود و المنت مربوطه فضایی اشغال نخواهد کرد.
🔸نکته قابل توجه این است که مرورگر های مختلف به روش های یکسانی در مواجه با visibility : collapse عمل نمی کنند.
❇️href=#top
🔹برای هدایت کاربر به بالای صفحه جاری میتوانید از مقدار
href=#top
استفاده کنید.
❇️Smooth scroll
🔹برای تنظیم اسکرول نرم برای کل سند html یا یک المنت بخصوص، میتوانید خاصیت scroll-behavior را برابر با
smooth
قرار دهید.
🔸برای اینکه مقدار تمام پراپرتی های یک المنت را به مقدار initial شده یا inherit شده آن ریست کنید از این پراپرتی استفاده کنید.
تمامی پراپرتی های به غیر از direction و unicode-bidi ریست خواهند شد.
🔸استفاده از مقدار currentColor به جای مشخص کردن دوباره نام رنگ مورد نظرتان برای پراپرتی هایی نظیر background و غیره باعث خواهد شده تا مرورگر از رنگ محاسبه شده پیشین برای آن المنت استفاده کند.
#frontEnd
#سی_اس_اس
🔰Css tricks
🔸با اینکه css آنقدرها پیچیده نیست، اما اگر تجربه ی زیادی هم در کار کردن با css داشته باشید باز هم چیزهای جدیدی هست که دانستن آن متعجب تون میکنه!
پراپرتی هایی که بسیار ازشون استفاده کردین بدون اینکه به جزئیاتش توجه خاصی کرده باشین، یا پراپرتی هایی که تاکنون ممکن است وجود آنها بی خبر بوده باشین.
🔹در این پست چندتا از این پراپرتی هارو میخوایم بررسی و معرفی کنیم.
❇️Color Property
🔹از این پراپرتی قائدتا بسیار استفاده کردین. (برای تغییر رنگ Text)
اما باید بدونید که این پراپرتی رنگ foreground المنت رو مشخص میکنه و فقط برای مشخص کردن رنگ text المنت نیست.
❇️visibility property
🔹از این پراپرتی هم حتما بسیار استفاده کرده اید و مقدار پیشفرض برای آن visible میباشد تفاوت آن با
display: none
این است که مرورگر در هنگام render المنتی که visibility آن hidden است فضای اشغال شده توسط المنت را در نظر میگیرد ولی المنت قابل رویت نمیباشد اما هنگامی که یک المنت display: none مرورگر در هنگام render صفحه هیچ فضایی برای المنت در نظر نمیگیرد.
پراپرتی visibility دارای مقداری دیگری برای set کردن به نام collapse میباشد. هنگامی که مقدار visibility المنتی را برابر با collapse قرار میدهید، مرورگر با آن المنت همانند حالت hidden عمل میکند، به استثنا در table rows و table row groups و table columns و table column groups در چنین مواقعی تنظیم کردن مقدار collapse برای یک المنت در table base المنت ها مانند display : none خواهد بود و المنت مربوطه فضایی اشغال نخواهد کرد.
🔸نکته قابل توجه این است که مرورگر های مختلف به روش های یکسانی در مواجه با visibility : collapse عمل نمی کنند.
❇️href=#top
🔹برای هدایت کاربر به بالای صفحه جاری میتوانید از مقدار
href=#top
استفاده کنید.
❇️Smooth scroll
🔹برای تنظیم اسکرول نرم برای کل سند html یا یک المنت بخصوص، میتوانید خاصیت scroll-behavior را برابر با
smooth
قرار دهید.
element {❇️all property
scroll-behavior: smooth;
}
🔸برای اینکه مقدار تمام پراپرتی های یک المنت را به مقدار initial شده یا inherit شده آن ریست کنید از این پراپرتی استفاده کنید.
تمامی پراپرتی های به غیر از direction و unicode-bidi ریست خواهند شد.
div {❇️currentColor
background-color: yellow;
color: red;
all: initial;
}
🔸استفاده از مقدار currentColor به جای مشخص کردن دوباره نام رنگ مورد نظرتان برای پراپرتی هایی نظیر background و غیره باعث خواهد شده تا مرورگر از رنگ محاسبه شده پیشین برای آن المنت استفاده کند.
div {@fullStackDevs
color: red;
border: 5px solid currentColor;
box-shadow: 0 0 5px solid currentColor;
}
This media is not supported in your browser
VIEW IN TELEGRAM
🔹 ابتدا کاری کنید که کار کند.
سپس آنرا زیبا کنید.
سپس اگر واقعا مجبورید آنرا سریع کنید.
90 درصد مواقع اگر آنرا زیبا کرده باشید،سریع نیز خواهد بود.
بنابراین فقط آنرا زیبا کنید. 🔹
"Joe Armstrong" 👨🏻💻
Computer scientist
source
@fullStackDevs
سپس آنرا زیبا کنید.
سپس اگر واقعا مجبورید آنرا سریع کنید.
90 درصد مواقع اگر آنرا زیبا کرده باشید،سریع نیز خواهد بود.
بنابراین فقط آنرا زیبا کنید. 🔹
"Joe Armstrong" 👨🏻💻
Computer scientist
source
@fullStackDevs
🔰 یکی از بهترین راه ها برای اکتیو کردن یک css بروی یک device خاص با عرض مشخص استفاده از media query در css3 میباشد.
دو روش برای استفاده از media query در css3 وجود دارد
در تصویر بالا به کمک پراپرتی media و مشخص کردن rule مد نظرمان، فایل stylesheet مشخص شده فقط در rule مشخص شده اعمال میشود.
🔸 توجه کنید در هر صورت فایل css لود خواهد شد اما فقط در صورت صدق rule مشخص شده، اکتیو و اعمال میشود.
@fullStackDevs
دو روش برای استفاده از media query در css3 وجود دارد
در تصویر بالا به کمک پراپرتی media و مشخص کردن rule مد نظرمان، فایل stylesheet مشخص شده فقط در rule مشخص شده اعمال میشود.
🔸 توجه کنید در هر صورت فایل css لود خواهد شد اما فقط در صورت صدق rule مشخص شده، اکتیو و اعمال میشود.
@fullStackDevs
اطلاعات حساب کاربری ۵۰۰ میلیون کاربر #لینکدین لو رفت
اطلاعات شخصی ۵۰۰ میلیون کاربر شبکه اجتماعی لینکدین فاش شده و گفته میشود هکرها قصد فروش این اطلاعات را در یک انجمن آنلاین دارند.
link
@fullStackDevs
اطلاعات شخصی ۵۰۰ میلیون کاربر شبکه اجتماعی لینکدین فاش شده و گفته میشود هکرها قصد فروش این اطلاعات را در یک انجمن آنلاین دارند.
link
@fullStackDevs
This media is not supported in your browser
VIEW IN TELEGRAM
Insights and productivity
The AI IntelliCode engine in Visual Studio continues to get better at seamlessly anticipating your next move. Visual Studio 2022 will provide more and deeper integrations into your daily workflows, helping you to take the right action in the right place at the right time.
📌 Link
@fullStackDevs
The AI IntelliCode engine in Visual Studio continues to get better at seamlessly anticipating your next move. Visual Studio 2022 will provide more and deeper integrations into your daily workflows, helping you to take the right action in the right place at the right time.
📌 Link
@fullStackDevs
#SourceCode
open-source clones of popular sites like Airbnb, Amazon, Instagram, Netflix, Tiktok, Spotify, Whatsapp, Youtube etc. See source code, demo links, tech stack, github stars.
Link
@fullStackDevs
open-source clones of popular sites like Airbnb, Amazon, Instagram, Netflix, Tiktok, Spotify, Whatsapp, Youtube etc. See source code, demo links, tech stack, github stars.
Link
@fullStackDevs
#Dapper
#EFCore
EF Core 6.0 !
#EntityFramework biweekly update #efcore
TechEmpower Fortunes perf!
⏫ EF Core 6.0 is 33.1% faster than EF Core 5.0
⏫ Dapper is also 6.0% faster
⏫ EF Core is now at 93.5% of Dapper perf
Plus: learn to contribute! We live-streamed a PR end-to-end.
📌 Link
@fullStackDevs
#EFCore
EF Core 6.0 !
#EntityFramework biweekly update #efcore
TechEmpower Fortunes perf!
⏫ EF Core 6.0 is 33.1% faster than EF Core 5.0
⏫ Dapper is also 6.0% faster
⏫ EF Core is now at 93.5% of Dapper perf
Plus: learn to contribute! We live-streamed a PR end-to-end.
📌 Link
@fullStackDevs