<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های بهنام بختیاری</title><link>https://virgool.ir/feed/@behnambakhtiari.ir</link><description>توسعه‌دهنده کسب‌وکار، مشاور بازاریابی | علاقمند به علوم رفتاری و طراحی تجربه</description><language>fa</language><pubDate>2026-11-10 22:37:00</pubDate><image><url>https://files.virgool.ir/upload/users/43457/avatar/89rqwU.jpeg</url><title>بهنام بختیاری</title><link>https://virgool.ir/@behnambakhtiari.ir</link></image><item><title>مخالفت با طرح صیانت از کاربران اینترنت</title><link>https://virgool.ir/@behnambakhtiari.ir/مخالفت-با-طرح-صیانت-از-کاربران-اینترنت-dzzzqk2alfof</link><description>خیلی خلاصه و کوتاه از تمام مدیران و صاحبان کسب و کارها، برنامه نویسان، گرافیست های عزیز، بازاریابان محتوا، سوشال مدیا مارکترها، دیجیتال مارکترها، متخصصین SEO و تمامی عزیزان و دوستانی که شغل و یا منبع درآمدشون ارتباط مستقیم یا غیر مستقیم با اینترنت داره، خواهش میکنم مخالفت خودتونو با #طرح_صیانت_اینترنت اعلام کنید.این طرح بجز نابودی، هیچ چیز دیگری به دنبال نخواهد داشت.عادل طالبی، دبیر انجمن صنفی کسب و کارهای اینترنتی در نشستی با نمایندگان مجلس در مورد #طرح_صیانت_از_حقوق_کاربران_در_فضای_مجازی:در طرح صیانت کلمه‌ی جایگزین را آورده‌اید، اما کسانی که قرار بود جایگزین‎ها را بسازند، در آمریکا گوگل و اینستاگرام را می‌سازند.۹۰ درصد متخصصان مهاجرت کرده‌اند، ۱۰ درصد باقی‌ مانده را هم فراری ندهید.با شیطنت امارات، قول می‌دهم بیش از ۹۰ هزار برنامه‌نویس از ایران مهاجرت کند. این طرح شوک بسیار وحشتناکی به فضای کسب و کار، مردم و متخصصان وارد خواهد کرد.ویدئوی مناظره ایشان در شبکه دو، در سایت رسمی بهنام بختیاری:https://behnambakhtiari.ir</description><category>بهنام بختیاری</category><author>بهنام بختیاری</author><pubDate>Fri, 06 Aug 2021 18:08:15 +0430</pubDate></item><item><title>iterators  و generators  دقیقا در جاوااسکریپت چکار میکنند؟! ( قسمت اول )</title><link>https://virgool.ir/@behnambakhtiari.ir/iterators-و-generators-دقیقا-در-جاوااسکریپت-چکار-میکنند-قسمت-اول-gx4mxcmr7jve</link><description>ما در جاوااسکریپت نیاز داریم داده ها (data) رو پیمایش کنیم (iterate) تا  بتونیم اونا رو داخل UI  خودمون جا بدیم.درسته؟خب ما در ES5 برای اینکار از متد هایی مثل map , filter یا حتی از یک حلقه for استفاده میکردیم. حالا در ES6 این iterator و generator ها اومدن داستان پیمایش کردن رو بصورت مستقیم به هسته جاوااسکریپت اضافه کردن که خیلی هم کار خوبی کردن!حالا چندتا سوال پیش میاد که ما بتونیم به پاسخ موضوع مقالمون برسیم: اصلا iterators  و iterables چی هستند؟؟اول توضیح در مورد عمل iteration : این عمل ینی اینکه چیزایی که قابل پیمایش هستند رو بیا دونه دونه element هاشو پیمایش کن، حالا طی این پیمایش  یه کاری  هم روی هر element انجام بده.خب، میتونیم بگیم که یک iterable داده ای (data structure) هست که می خواد elementهای خودش برای همه قابل دسترسی قرار بده تا بتونن روی اون پیمایش کنن و ازش استفاده کنن. حالا این &#34;قابل دسترس &#34; قرار دادن رو کی انجامش میده؟؟ این دوستمون انجامش میده : Symbol.iterator( بهش میگن یه کارخونه برای iteratorها )و اینکه iterator چی هست خلاصش اینه که اون دوستی که داره عمل iterate  کردن رو انجام میده ما بهش میگیم iterator .چه مقادیری در جاوااسکریپت قابل پیمایش هستند؟اینم یه لیست از چیزایی که قابل پیمایش هستند:آرایه ( Arrays )رشته ( Strings )مپ ( Maps )ست ( Sets )داده های   DOM Data Structurs حالا یه سوال دیگه، ایده ی داستان itarable اصلا از کجا اومده؟؟برای جوابش اول باید دوتا موضوع رو بدونیم یک data consumers و دیگری data sources . خیلی ساده و خلاصه بخوام بگم دیتا کانسومر ها برای اینکه کار کنن و مفید باشن، نیاز دارن به اطلاعات..اوکی؟؟ حالا این اطلاعاتشونو از کیا میگیرن؟ از دیتا سورس ها. حالا ما یدونه راه ارتباطی نیاز داریم تا این دوتا رو به هم وصل کنیم تا اطلاعاتشون رد و بدل بشه.اینجاست که iterable میاد واسطه میشه و کمکمون میکنه.این عکس کمک میکنه بهتر موضوع رو درک کنید.این مقاله ادامه داره و توی چندتا بخش قراره منتشر بشه، در قسمت های بعدی توضیحاتم رو کامل میکنم...امیدوارم براتون مفید بوده باشه، دوست داشتید یه سر هم به کانال ما بزنید که کلی تمرین جاوااسکریپتی داریم و باهم چالش های باحالی تجربه میکنیم :)</description><category>بهنام بختیاری</category><author>بهنام بختیاری</author><pubDate>Mon, 01 Feb 2021 20:30:11 +0330</pubDate></item><item><title>۳ تکنیک بسیار مهم که هر برنامه نویس جاوااسکریپت باید بدونه !</title><link>https://virgool.ir/Only-js/۳-تکنیک-بسیار-مهم-که-هر-برنامه-نویس-جاوااسکریپت-باید-بدونه-je8rurbpvez5</link><description>سلام به دوستان عزیزم. در این مطلب قراره ما با سه تا تکنیک جالب و به درد بخور در مورد برنامه نویسی javascript آشنا بشیم. یادگیری این تکنیک ها به شما کمک میکنه از بقیه خیلی بهتر باشید.۱. تکنیک Curryingداستان Currying میگه  ما برای اینکه، برای مثال به یک تابع ۳ تا ورودی (argument) بدیم بجای این کار یک ورودی به آن اختصاص دهیم و یک تابع درون تابع اصلی تعریف کنیم، دومین ورودی را به تابع درونی بدیم و داخل همین تابع مجددا تابع دیگری تعریف کنیم و سومین ورودی را به  این تابع بدیم.اینجا ما بصورت معمول ۳ تا ورودی به تابع خودمون دادیم:const sum=function (a,b,c) {&#xA;       return  a+c+b&#xA;}حالا میایم از currying استفاده میکنیم که دقیقا کار تابع بالا رو انجام میده:const  sum  = function (a) {&#xA;    return function (b) {&#xA;        return function (c) {&#xA;            return a + b + c&#xA;        }&#xA;    }&#xA;}این که کدهارو طولانی تر کرد...پس چرا ازش استفاده کنیم؟ چرا مفیده؟برای این currying مفیده چون یجورایی از closure استفاده کرده و اینکه بهمون کمک میکنه توابع مرتبه بالا (higher-order function) بسازیم. که حتما موقع کار با رویداد ها (event handling) به دردمون میخوره.توابع مرتبه بالا توابعی هستند که یک تابع را به عنوان پارامتر ورودی دریافت و یا به عنوان خروجی ارسال می کنند، دانستن اینکه چه زمانی و چگونه از این توابع استفاده می شود ضروری است ،استفاده از این توابع باعث میشه کد هایی که می نویسین ساده تر و قابل فهم تر بشه.۲. تکنیک Memoizationمعنی memoization میشه &#34;خاطره سازی&#34; ولی خب معنی لفظی زیاد مهم نیست، بیاید درکش کنیم. خیلی ساده بگم:فرض کنید ما یک تابع داریم و ازش استفاده میکنیم و آخرش هم یک مقدار(value) بهمون بر میگردونه . اوکی؟ خب حالا دفعه دوم که میخوایم از این تابع دوباره استفاده کنیم memoization میگه من مقدار دفعه قبلی رو داخل یه جا برات نگه داشتم (مثلا داخل یه متغیر به اسم cache ) خب همون رو برات بر میگردونم...چه کاریه دوباره بیای عملیات انجام بدی آخه؟! داخل کد هم یک نگاهی بندازیم مطلب بهتر جا بیفته:const memoizedAdd = () =&gt; {&#xA;        let cache = { }&#xA;        return (value) =&gt; {&#xA;               if (value in cache) {&#xA;                    console.log(&#39;Fetching from cache&#39;)&#xA;                    return cache[value]&#xA;               } else {&#xA;                    console.log(&#39;Calculating result&#39;)&#xA;                    let result = value + 10&#xA;                    cache[value] = result&#xA;                    return result&#xA;               }&#xA;      }&#xA;}&#xA;// returned function from memoizedAdd&#xA;const newAdd = memoizedAdd();&#xA;console.log(newAdd(9)); //output: 19 calculated&#xA;console.log(newAdd(9)); //output: 19 cached۳. استفاده از call , apply , bindاول یک مثال بزنیم بعدش خیلی ساده با چندتا عکس مفهومش درک میشه:let obj = {&#xA;   num: 2&#xA;} &#xA;let add = function (num2, num3, num4) {&#xA;   return this.num + num2 + num3 + num4&#xA;}&#xA;let  arr  = [ 3, 4, 5 ]&#xA;&#xA;//Call method&#xA;console.log(add.call(obj, 3, 4, 5))  //Output : 14&#xA;/Apply method&#xA;console.log(add.apply(obj, arr))  //Output : 14&#xA;//bind Method&#xA;let bound = add.bind(obj)&#xA;console.log(bound(3, 4, 5))  //output : 14کارهای خیلی باحالی با این ۳ تا متد که مربوط به Object ها هستند، میشه انجام داد. حالا چرا میگیم اینا مهم و کاربردی هستند؟!فرض کنید ما دوتا object ساختیم و یک متد هم خارج از بدنه این object ها براشون ایجاد کردیم، حالا چجوری مقادیر و دیتا رو بین object و method مورد نظرش رد و بدل کنیم؟اینجاس که این ۳تا متد به کمک ما میان و طبق کد های بالا میتونید ببینید که چقدر باحال امکان استفاده از this رو خارج از یک object و داخل یک method خارجی، برای ما فراهم میکنه.هر سوالی داشتید داخل نظرات بپرسید حتما کمکتون میکنم ممنون از توجهتون، همیشه عالی باشید.</description><category>بهنام بختیاری</category><author>بهنام بختیاری</author><pubDate>Sun, 24 Jan 2021 19:23:50 +0330</pubDate></item></channel></rss>