| کانال توسعهدهندگان |
رفتن به کانال در Telegram
⭕️ کانال توسعهدهندگان دولوپیکس 💠 دولوپیکس | جامعه توسعهدهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport
نمایش بیشتر1 401
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+17 روز
-730 روز
آرشیو پست ها
🦾 زور بازوت رو نشون بده و جایزه ببر!
💰 یه مسابقه ۱۰۰ میلیون تومنی برای ساخت بازو (بات) و مینیاپ در اپلیکیشن بله
🎯 از استعدادت پول در بیار!
❓چطوری؟
بله با مسابقهٔ «زور بازوت رو نشون بده!» یک فرصت عالی برای مهندسین نرمافزار، وب دولوپرها، صاحبان سایتها و اپلیکیشنها و تیمهای محصول فراهم کرده که پاسخگوی این دغدغههاست.
🎁 یه مسابقه با ۱۰۰ میلیون تومن جایزهٔ نقدی و ۱ میلیارد تومن اعتبار تبلیغات منتظرته! ♨️
📎همین الان در مسابقه ثبتنام کن! ➡️
💬 کانال اخبار بازو دراپلیکیشن بله
کانال اطلاعرسانی بله | @BaleMessenger
Repost from N/a
ثبتنام در ناراستار - NarStar شروع شد!🧩
10 ساعت پر هیجان: یه روز جمعه رو بشین بازی بساز!
شبکه سازی: با بقیه بازیسازا آشنا شو و تیم بساز!
🏆جوایز مسابقه: 🏆
🥇 تیم اول 15 میلیون تومان
🥈 تیم دوم 12 میلیون تومان
🥉 تیم سوم 9 میلیون تومان
🎖 تیم چهارم 7 میلیون تومان
(جوایزی به رسم یادبود برای سایر شرکت کنندگان)
🎮 هر انجینی که دوست داری استفاده کن(Unity, Game Maker, Construct و ...)
حتی اجازه داری از هوش مصنوعی هم کمک بگیری!
همین الان ثبتنام کن (ظرفیت محدود):🗿
@narstar_ir
📞 اطلاعات بیشتر:
@narstar_gamejam
⏰ تاریخ برگزاری:
روز جمعه 10 اسفند 1403 - 1403/12/10
🛑آخرین مهلت ثبتنام:
2 اسفند 1403
💎برگزار کننده:
زیستبوم کودک و نوجوان انارستان - www.anarestan.com
#بازی_سازی #ناراستار #گیمجم #گیم_جم #مسابقه
⚙️ کانفیگ Neovim:
در NVim علاوه بر VimScript برای کانفیگ، از زبان خوب Lua نیز پشتیبانی میشود و فایل آن init.lua نام دارد. برای شروع، پیشنهاد میکنیم محیط ادیتور خود را مانند ما کانفیگ کنید:
-- General settings
vim.o.number = true -- Show line numbers
vim.o.relativenumber = true -- Show relative line numbers
vim.o.syntax = 'on' -- Enable syntax highlighting
vim.o.clipboard = 'unnamedplus' -- Use system clipboard for copy/paste
vim.o.wrap = true -- Enable line wrapping
vim.o.ignorecase = true -- Ignore case while searching
vim.o.smartcase = true -- Override ignorecase if search includes uppercase letters
vim.o.hlsearch = true -- Highlight search results
vim.o.incsearch = true -- Incremental search
vim.o.smartindent = true -- Smart indentation
vim.o.expandtab = true -- Convert tabs to spaces
vim.o.tabstop = 4 -- Set tab width to 4 spaces
vim.o.shiftwidth = 4 -- Set indent width to 4 spaces
vim.o.softtabstop = 4 -- Set soft tab width to 4 spaces
vim.o.autoindent = true -- Automatically maintain indentation
vim.o.showmatch = true -- Highlight matching brackets
vim.o.cursorline = true -- Highlight the current line
vim.o.scrolloff = 8 -- Keep 8 lines visible when scrolling
vim.o.termguicolors = true -- Enable true color support
-- Set up a better status line
vim.o.statusline = '%F %y %l/%L %p%%' -- Show file path, type, and line info
-- File type settings
vim.cmd('filetype plugin indent on') -- Enable file type detection, plugins, and indentation
-- Key mappings (keybindings)
vim.api.nvim_set_keymap('n', '<leader>w', ':w<CR>', { noremap = true, silent = true }) -- Save file with \w
vim.api.nvim_set_keymap('n', '<leader>q', ':q<CR>', { noremap = true, silent = true }) -- Quit Vim with \q
🎯 به نظر میآید همینها برای شروع کافی باشند. در ادامه به سراغ کامندهای این ادیتور و کار در modeهای مختلف آن خواهیم رفت و سپس بهترین پلاگینهای Vim و Neovim را نصب و راهاندازی میکنیم.
🔖 #Programming, #برنامه_نویسی
👤 Soheil
💎 Channel: @DevelopixChannel✨ برش دوم: نصب و کانفیگ Vim و Neovim
🪟 ویندوز:
🔸از صفحه اصلی Vim یا ریپازتوری آن فایل نصبی GVim را دانلود کنید.
زمان نصب، در مرحله Choose Components، گزینه Full را برای استفاده از تمام ویژگیهای Vim انتخاب کنید. در مراحل بعدی نیز چیزی را تغییر ندهید. هماکنون شما Vim و یک نسخه گرافیکی از آن را به همراه یک کانفیگ پیشفرض نصب کردید.
🔸برای نصب Neovim نیز از این صفحه، در آخرین Release، فایلهای msi. یا zip. را دانلود کنید. (bin/nvim.exe در zip. فایل اجرایی برنامه است)
🐧 لینوکس:
برای دانلود فایلهای AppImage به ریپازتوری Vim و Neovim مراجعه کنید.Ubuntu:
sudo apt update
sudo apt install vim
sudo add-apt-repository ppa:neovim-ppa/stable
sudo apt update
sudo apt install neovim
Fedora/RHEL/CentOS:
sudo dnf install -y vim-enhanced
sudo dnf install -y neovim
Arch:
sudo pacman -Syu vim
sudo pacman -Syu neovim
🍏 مک:
به سادگی با استفاده از Homebrew:
brew install vim
brew install neovim
و به همین ترتیب برای نصب MacVim (یک نسخه دارای GUI و امکانات اضافی):
brew install macvim
🛠 کانفیگ Vim:
برای فعالسازی برخی امکانات، شخصیسازی ظاهری و تنظیم بخشی از رفتارها، به سراغ فایل vimrc. در لینوکس و مک یا vimrc_ در ویندوز میرویم که با زبان VimScript نوشته میشود.
میتوانید از کانفیگ زیر برای بهبود تجربه کاربری خود استفاده کنید:
" Show line numbers set number " Enable syntax highlighting syntax on " Disable compatibility with vi which can cause unexpected issues set nocompatible " Highlight cursor line underneath the cursor horizontally set cursorline " Show the command being typed set showcmd " Show the mode you are on the last line set showmode " Show cursor position in the status line set ruler " Highlight matching parentheses or brackets set showmatch " Enable auto completion menu after pressing TAB set wildmenu " Show suggestions as a list and complete up to the longest match set wildmode=list:longest " Wildmenu will ignore files with these extensions set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx " Enable type file detection filetype on " Enable plugins and load plugin for the detected file type filetype plugin on " Load an indent file for the detected file type filetype indent on " Set the number of spaces for a tab set tabstop=2 " Set the number of spaces for auto-indentation set shiftwidth=2 " Automatically maintain indentation on new lines set autoindent " Improve tab behavior for smarter indentation set smarttab " Convert tabs to spaces set expandtab " Enable backup files set backup " Enable undo history persistence set undofile " Directory for backup files set backupdir=~/.vim/backups " Directory for undo files set undodir=~/.vim/undo " Ignore case in search patterns set ignorecase " Override ignorecase if search includes uppercase letters set smartcase " Highlight matching words during incremental search set incsearch " Highlight search results set hlsearch " Use the system clipboard for copy/paste set clipboard=unnamedplus " Show special characters like tabs and trailing spaces set list " Define symbols for tabs and trailing spaces set listchars=tab:▸\ ,trail:· " STATUS LINE ======================================== " Clear status line when vimrc is reloaded set statusline= " Left section of the status line: show file name, modified status, file type, and readonly flag set statusline+=\ %F\ %M\ %Y\ %R " Add a divider to separate left and right sections set statusline+=%= " Right section of the status line: show file details set statusline+=\ ascii:\ %b\ hex:\ 0x%B\ row:\ %l\ col:\ %c\ percent:\ %p%% " Display the status line on the second to last line of the screen set laststatus=2🔖 #Programming, #برنامه_نویسی 👤 Soheil 💎 Channel: @DevelopixChannel
Repost from | Erfan's Notes |
⭕️ دوره آموزش برنامهنویسی مینی اپ تلگرام
💠 در این دوره به آموزش برنامهنویسی مینی اپ تلگرام میپردازیم، از مباحث پایه و عمومی شروع میکنیم و مفاهیم رو یاد میگیریم.
✨ بُرِش اول: معرفی یک دوست قدیمی؛ Vim
ادیتور Vim (مخفف "Vi IMproved") یک ویرایشگر متن screen-based قدرتمند، انعطافپذیر، open source و رایگان است که در سال ۱۹۹۱ توسط برام مولینار (Bram Moolenaar) ساخته شد. Vim بر اساس ویرایشگر Vi طراحی شده و در ابتدا برای ویرایش متن در سیستمهای مبتنی بر یونیکس (Unix) ایجاد شد.
این ادیتور امروزه با امکانات پیشرفتهتر و قابلیت شخصیسازی بیشتر، به یکی از ابزارهای محبوب در میان توسعهدهندگان تبدیل شده است.
✍ در ادامه به معرفی کامل Vim میپردازیم. سپس نحوه نصب/کانفیگ را آموزش داده و دستورات و ویژگیهای مختلف آن را با هم کشف میکنیم. پیشنهاد میکنم اگر در مقابل این ادیتور گارد خاصی دارید یا به چشم یک هیولا به آن نگاه میکنید، این سری پستها را از دست ندهید!
🏆 برتریها نسبت رقبا
⚡️ سرعت بالا: بسیار سبک بوده و طراحی سادهای دارد که آن را نسبت به IDEها و ویرایشگرهای دیگر سریعتر میکند.
🎨 کانفیگ گسترده: از طریق فایل .vimrc، محیط کاری خود را به شکلی که دوست دارید تنظیم میکنید.
📦 پشتیبانی از پلاگینها: پلاگینهای متنوعی وجود دارند که میتوانند قابلیتهای Vim را گسترش دهند.
🖥 مناسب برای محیطهای CLI: اگر با سرور یا محیطهای command line کار میکنید، Vim ابزاری ایدهآل برای ویرایش فایلها است.
⚠️ معایب و چالشها
👨🦯 نبود رابط گرافیکی: برخی کاربران ترجیح میدهند از ابزارهایی دارای رابط گرافیکی (GUI) استفاده کنند؛ که این ویژگی در Vim وجود ندارد.
🛣 منحنی یادگیری تند: کار در modeهای مختلف و یادگیری دستورات ممکن است برای تازهکارها سخت باشد.
🌀 پیچیدگی تنظیمات: پیکربندی Vim زمانبر و استفاده از پلاگینها در آن نسبتا سخت است.
💡 چرا باید برویم سراغ Vim؟
برای ویرایش فایلهای کانفیگ و اسکریپتهای Bash استفاده از Vim بسیار مناسب است. همچنین Vim ویژگیهای متنوعی از جمله syntax highlighting و bracket matching یا split window را در عین سادگی به شما ارائه میدهد و ابزارهای خوبی هم برای جستجو و جایگزینی متن در فایلهای بزرگ دارد.
❗️ البته Vim در درجه اول یک ادیتور ساده بوده و هر چه هم خوب باشد، باز گزینه مناسبی برای پروژههای بزرگ نیست. هر چند میتوانید با نصب پلاگینهایی مثل NERDTree یا Airline، به آن امکانات متنوعی اضافه کرده و مانند یک IDE تنظیمش کنید 🛠
🔥 تاثیر در بهرهوری
⏱️ سرعت: با تسلط بر دستورات، قابلیتهای پیشرفته مثل macro و حالتهای مختلف خواندن و نوشتن فایلها، زمان زیادی را در ویرایش داکیومنتها و کدنویسی صرفهجویی میکنید.
🔄 جریان کاری بیوقفه: نیازی به ماوس ندارید و تمام عملیاتها را با کیبورد انجام میدهید.
🌐 استفاده در سیستم عاملهای مختلف
🐧 لینوکس و یونیکس: نصب شده به طور پیشفرض.
🍎 مک و ویندوز: قابل نصب و راهاندازی به راحتی هر چه تمامتر.
🖼 تعامل راحتتر؛ GVim و MacVim
اگر نبود رابط گرافیکی اذیتتان میکند، راه حل GVim/MacVim است. ورژنهایی از Vim که GUI را به کاربران هدیه میدهند. اگر به استفاده از ماوس و تجربه بصری عادت دارید، این نسخهها گزینههای جذابتری برای شما هستند. نگران هم نباشید؛ بیشتر امکانات و ویژگیهای اصلی Vim در این نسخهها نیز وجود دارند.
🔍 قابلیتهای بیشتر؛ Neovim
ادیتور Neovim نسخهای مدرن و بهبودیافته از Vim است که از مشکلات و محدودیتهای Vim کم کرده است:
➕ معماری پلاگینها: Neovim با API مدرن خود، امکان توسعه پلاگینهای پیشرفتهتر با زبانهای برنامهنویسی مختلف را فراهم میکند.
🚀 قابلیت multithreading: وظایف سنگین به صورت همزمان انجام میشوند؛ در واقع با استفاده از job control چندین فرایند در پسزمینه اجرا میشوند که تجربه کاربری بهتری را ارائه میدهد.
⚙ پشتیبانی از LSP: با استفاده از language server، ویژگیهایی مانند تکمیل خودکار (code completion) و شناسایی ارورها حین نوشتن کد را فراهم میکند.
🌍 پشتیبانی و کامیونیتی فعال: به طور منظم بهروزرسانی شده و ویژگیهای جدیدی به آن اضافه میشود.
🔗 و چندین ویژگی خوب دیگر
🔖 #Programming, #برنامه_نویسی
👤 Soheil
💎 Channel: @DevelopixChannel
+2
پارادایم رویهای 🛠
مهمترین مفاهیم برنامهنویسی رویهای(Procedural Programming)، از بنیادینترین پارادایمها، عبارتاند از:
Procedural Calls 🗂
کد به مجموعهای از رویهها یا توابع تقسیم میشود که وظیفه خاصی را انجام میدهند.
Linear Program Flow ➡️
دستورات به صورت خطی و در یک ترتیب مشخص اجرا میشوند.
Parameter Passing 📬
ارسال دادهها به توابع به دو شکل Pass by Value(ارسال کپی مقدار) و Pass by Reference(ارسال آدرس متغیر) انجام میشود.
Top-Down Design ⬇️
مشکلات پیچیده به زیرمسئلههای کوچکتر تقسیم میشوند و هر زیرمسئله با یک رویه خاص حل میشود.
Global/Local Variables 🌐
از متغیرهای محلی و جهانی برای ذخیرهسازی دادهها استفاده میشود.
⚡️ مزایای برنامهنویسی رویهای:
دسترسی ساده به دادهها در داخل یا بین رویهها
مدیریت بهتر و فهم آسانتر جریان برنامه
قابلیت استفاده مجدد و نگهداری بالا
دیباگ و تست ساده
💡 از جمله زبانهای برنامهنویسی که از این رویکرد پشتیبانی میکنند، میتوان به C و Pascal و Python و ALGOL اشاره کرد.
🔗 اطلاعات بیشتر
🔖 #Programming, #برنامه_نویسی
👤 Soheil
💎 Channel: @DevelopixChannel
پاردایم تابعی 🏗
مفاهیم مهم برنامهنویسی تابعی(FP):
Pure Functions ⚙️
هر تابع فقط به ورودیهایش وابسته است.
Stateless 📊
سیستم یا تابع اطلاعاتی مربوط به وضعیت(state) قبلی خود نگه نمیدارد.
Composability 🧩
توابع را میتوان ترکیب کرد تا توابع بزرگتر ساخت.
Lazy Evaluation 🛌
محاسبات فقط زمانی انجام میشوند که واقعاً نیاز باشد.
Higher-Order Functions 🔄
توابع میتوانند بهعنوان ورودی یا خروجی توابع دیگر عمل کنند؛ مانند Map.
Immutable Data 🔒
تغییرپذیری دادهها در این رویکرد کنار گذاشته میشود که از تغییر ناخواسته آنها جلوگیری میکند.
🏆 برخی مزایای این الگوی برنامهنویسی:
مناسب بودن برای پردازش موازی(Parallelism)
مدیریت آسان Infinite Streams
عدم وجود خطاهای جانبی(Side Effects)
افزایش قابلیت Traceability و دیباگ سادهتر
پیشبینی دقیقتر و سادهتر رفتار
🔧 زبانهای Elixir و Haskell تابعی هستند. همچنین Redux و Scala و Python و JavaScript و React.js و Kotlin و Clojure نیز از این پارادایم پشتیبانی میکنند.
🔗 اطلاعات بیشتر
🔖 #Programming, #برنامه_نویسی
👤 Soheil
💎 Channel: @DevelopixChannel
+3
پارادایم شیگرایی 🧩
۴ مورد از مهمترین اصلهای برنامهنویسی شیگرا(OOP) عبارتند از:
Inheritance 🧬
وراثت به اشیا اجازه میدهد ویژگیها و رفتارهای اشیا دیگر را به ارث ببرند.
Encapsulation 💊
کپسولهسازی به پنهانسازی جزئیات یک class از دیگر classها و ارائه رابط عمومی برای تعامل با آن اشاره دارد که موجب میشود تغییرات داخلی بر روی کدهای دیگر تأثیر نگذارند.
Polymorphism 🎭
چندریختی این امکان را میدهد که به اشیا با انواع مختلف از طریق یک رابط مشترک دسترسی پیدا کرد و هر شی بسته به نوع خود رفتار خاصی نشان دهد.
Abstraction 🔎
انتزاع فرآیند سادهسازی پیچیدگیها از طریق تمرکز بر ویژگیهای ضروری و مخفی کردن جزئیات است.
✨ از مزایای برنامهنویسی شیگرا میتوان به کاهش یا عدم تکرار کد و افزایش قابلیت نگهداری، استفاده مجدد، مدلسازی دقیق و تست سادهتر برنامه اشاره کرد.
🎯 تسلط بر اصول OOP برای توسعهدهندگان وب، نرمافزار موبایل، بازی، تحلیل سیستم و به خصوص برنامهنویسان ++C و Java و C# و Python بسیار مفید است.
🔗 اطلاعات بیشتر
🔖 #Programming, #برنامه_نویسی
👤 Soheil
💎 Channel: @DevelopixChannel
پارادایمهای برنامهنویسی: جهانهای متفاوت توسعه برنامه 🌌
پارادایمهای برنامهنویسی، چهارچوبهای فکری حل مسائل و مجموعهای از مفاهیم و روشها برای ساختاردهی کدها هستند. در اینجا به بررسی مهمترین پارادایمها، مزایا، معایب و کاربردهای آنها میپردازیم.
برنامهنویسی دستوری (Imperative) 🔧
بر اساس ارائه دستورات گامبهگام به ماشین عمل میکند و بر تغییر وضعیت سیستم تمرکز دارد.
مزایا:
-سادگی درک: بهدلیل گامبهگام بودن، درک و پیادهسازی آن آسان است.
-کنترل کامل: توسعهدهنده کنترل دقیق بر روی جریان اجرای برنامه دارد.
معایب:
-مدیریت دشوار کدهای بزرگ: با افزایش حجم کد، مدیریت و دیباگ آن دشوار میشود.
-مستعد خطا: تغییرات کوچک میتواند خطاهای بزرگی ایجاد کند.
زبان/فریمورکهای رایج: C ،Express.js و Matlab
برنامهنویسی شیءگرا (Object-Oriented) 🧬
بر پایه مفهوم اشیاء است که دادهها و رفتارها را در قالب کلاسها ترکیب میکند.
مزایا:
-استفاده مجدد از کد: کلاسها و اشیاء امکان استفاده مجدد از کد را فراهم میکنند.
-مدیریت بهتر پیچیدگی: ویژگیهایی مانند کپسولهسازی(Encapsulation)، وراثت(Inheritance) و چندریختی(Polymorphism) ساختاردهی و مدیریت پروژهها را آسان میکند.
معایب:
-مصرف منابع: نسبت به برخی پارادایمها منابع بیشتری مصرف میکند.
-پیچیدگی طراحی: طراحی سیستمهای بزرگ شیءگرا نیازمند معماری پیچیدهای است.
زبانها/فریمورکهای رایج: C# ،CPP و Java
برنامهنویسی تابعی (Functional) 🛠
تمرکز آن بر روی توابع خالص(Pure Functions) و دادههای تغییرناپذیر(Immutable Data) است. توابع بهعنوان ورودی یا خروجی سایر توابع استفاده شده و رفتارهای پیشبینیپذیری دارند. میتوان از این پارادایم برای پردازش دادههای بزرگ و الگوریتمهای پیچیده استفاده کرد.
مزایا:
-کاهش خطا: به کاهش خطاها و سادهسازی Unit Testing کمک میکند.
-ماژولار بودن: ترکیب توابع ساده به ساخت عملیاتهای پیچیده کمک میکند.
معایب:
-پیچیدگی در استفاده: مفاهیم آن برای تازهکاران کمی سخت است و محدودیت در کار با دادههای غیرقابل تغییر ممکن است نیاز به تفکر خاصی داشته باشد.
زبان/فریمورکهای رایج: JavaScript، Haskell و Kotlin
برنامهنویسی اعلانی (Declarative) 📜
در این پارادایم، توسعهدهنده نتیجه نهایی را بیان میکند و نیازی به مشخص کردن جزئیات چگونگی انجام آن ندارد. مناسب برای پایگاه دادهها و سیستمهای توصیف ساختار دادهها.
مزایا:
-ساده و مستقیم: توسعهدهنده تنها نیاز به بیان نتیجه دارد.
-افزایش سرعت: کد کمتر، توسعه سریعتر.
معایب:
-کنترل کمتر: نمیتوان جزئیات اجرای کد را مدیریت کرد.
-عیبیابی دشوار: پیدا کردن خطاها ممکن است پیچیده باشد.
زبان/فریمورکهای رایج: SQL و Prolog
برنامهنویسی منطقی (Logic) 🧠
بر مبنای منطق ریاضی و تعریف اصلها و قاعدههایی برای حل مسائل سوار شده است. نتیجه با پرسش از سیستم به دست میآید. از برنامهنویسی منطقی در توسعه سیستمهای هوش مصنوعی و پردازش زبان طبیعی(NLP) استفاده میشود.
مزایا:
وضوح کد: قواعد منطقی باعث خوانایی و شفافیت کد میشوند.
کاربرد در مسائل پیچیده با ساختار مشخص: مانند اثبات قضایا، حل مسائل محدودیتها(CSPs) و سیستمهای خبره(Expert Systems).
معایب:
کندی در پردازش مسائل با فضای جستجوی بزرگ: برای مسائل با تعداد زیادی متغیر یا راهحلهای احتمالی ممکن است کارآمد نباشد.
محدودیت در پیادهسازی عملیات ورودی/خروجی (I/O): زبانهای برنامهنویسی منطقی معمولاً برای انجام عملیات I/O، نیازمند راهکارهای پیچیده یا کتابخانههای خاص هستند.
زبان/فریمورکهای رایج: Absys و Prolog
برنامهنویسی واکنشی (Reactive) ⚡️
بر اساس جریان داده(Data Streams) و گسترش رویداد(Event Propagation) کار میکند. مناسب برای اپلیکیشنهای real-time مانند چت و سیستمهای مالی.
مزایا:
-واکنش خودکار و سریع به تغییرات: سیستم به طور پویا به رویدادهای لحظهای پاسخ میدهد و جریان دادهها را بدون نیاز به مدیریت دستی بهروزرسانی میکند.
-کاهش پیچیدگی مدیریت همزمانی: مناسب برای برنامههایی که نیازمند مدیریت چندین رویداد به صورت همزمان و بدون ایجاد اختلال در عملکرد هستند.
معایب:
-پیچیدگی طراحی: طراحی سیستمهای واکنشی ممکن است چالشبرانگیز باشد.
-نیاز به دانش تخصصی: درک عمیق از مفاهیم واکنشی ضروری است.
زبان/فریمورکهای رایج: Spring WebFlux و RxJs
🎯 هر پارادایم مزایا و معایب خاص خود را دارد. انتخاب پارادایم مناسب، به زبان برنامهنویسی، نیازمندیهای پروژه و تجربه تیم توسعهدهنده بستگی دارد. با شناخت کامل این پاردایمها، میتوان برنامههای اصولی و کارآمدتری نوشت.
🔖 #Programming, #برنامه_نویسی
👤 Soheil
💎 Channel: @DevelopixChannel
سلام
پرسشنامه پیش رو با هدف درک بهتر رفتار و نیازهای کسبوکارهای اینترنتی ایرانی در استفاده از ابزارهای پرداخت توسط یک تیم پژوهشی مستقل طراحی شده است. نتایج این پژوهش به ما کمک میکند تا ابزارهایی کارآمدتر و منطبق با نیازهای واقعی شما ارائه دهیم. تکمیل این پرسشنامه کاملاً بینام است و هیچ اطلاعات شخصی از شما ذخیره نخواهد شد. پاسخهای شما نقش کلیدی در بهبود خدمات ابزارهای پرداختی اینترنتی در کشور دارد، بنابراین از شما خواهشمندیم با دقت و صداقت به سوالات پاسخ دهید. زمان لازم برای تکمیل: حدود 5 دقیقه لطفاً برای شروع پرسشنامه، روی لینک زیر کلیک کنید و ما را در این مسیر همراهی کنید.
.
https://survey.porsline.ir/s/lEtAnSw8
.
سپاس فراوان از همکاری صمیمانه شما
💠 تعریفی ساده Multi Threading
قبل از اینکه بدانیم multi thread چیست، ابتدا باید درک کنیم که اصلا چرا باید از multi thread استفاده کنیم؟ چرا باید multi thread رو یاد بگیریم؟
بهتون میگم.
شرکت ها، ساختمان ها، فروشگاه ها، بانک ها و ... همه این مشاغل ممکنه با یک نیرو کارشون راه بیوفته اما همگی چند کارمند دارند؛ چرا؟ برای اینکه "مراجعه کننده" منتظر نمونه و کار ها سریع تر پیش بره.
پس با افزایش نیرو سرعت انجام کار ها بیشتر میشه و ارباب رجوع در صف نمیایسته و همگی خوشوخرم کارشونو انجام میدن.
در این مثال هر "کارمند" معادل با یک thread هست و "مراجعه کننده" همان تسک های ما هستند.
با استفاده از multi thread توی برنامه task ها توی نوبت نمیمونن و باهم پردازش میشن.
تِرد ها کوچکترین واحد پردازش در سیستم عامل هستند و هر process میتونه حداقل یک ترد و حداکثر بی نهایت ترد داشته باشه.
پی نوشت: این یک تعریف ساده و کاملا کلی از multi threading بود و هدف از این توضیحات صرفا آشنا شدن شما با این معماری بود.
🔖 #Programming, #برنامه_نویسی
👤 Yasin
💎 Channel: @DevelopixChannel
🤔 چرا کد تمیز؟
کد تمیز باعث افزایش بهرهوری، کاهش هزینههای نگهداری و تسهیل توسعه پروژهها در بلندمدت شود. پس رعایت اصول در کدنویسی نه تنها به سرعت توسعه پروژهمان کمک میکند، بلکه هزینههای اضافی و خطرات مربوط به کدهای پیچیده را نیز به حداقل میرساند.
❓اما کد تمیز دقیقا چیست؟
هر برنامهنویس باتجربهای ممکن است تعریف خاص خود را از کد تمیز داشته باشد. بیایید بهترین تعاریف را از زبان بزرگان بشنویم:
• بییارنه استراستروپ(Bjarne Stroustrup):
کد تمیز کار را به کارآمدترین شکل انجام میدهد.• گریدی بوچ(Grady Booch):
کد تمیز ساده و مستقیم است، داستانی را روایت میکند و هیچگاه مقصود نویسنده را پنهان نمیکند.• رون جفریز(Ron Jeffries):
کد تمیز هر چیزی را که انتظار دارید انجام میدهد و شما را شگفتزده میکند.نکته قابل توجه این است که تمامی این تعاریف حول یک محور مشترک میچرخند: کدی که به خوبی نوشته شده باشد، ساده، قابل درک، انعطافپذیر و کارآمد است. ❌ مگر یک کد بد چه دردسرهایی میتواند ایجاد کند؟ کدهای بد، مشکلات بسیاری را برای پروژهها به وجود میآورند: 🌀 افزایش پیچیدگی و مشکلات در هر تغییر کوچک 📉 کاهش شدید بهرهوری تیم توسعه ⚠️ ایجاد "تله" برای تیم توسعه 🔄 انباشت کدهای بد و گرفتار شدن توسعه در یک چرخه منفی و خسارتهایی بزرگ در نتیجه نوشتن کد غیراصولی و ضعیف: 💸 هزینههای پنهانی (The Total Cost of Owning a Mess) هزینههای پنهانی که به مرور زمان در اثر انباشت کدهای بد ایجاد میشوند شامل زمانی که صرف رفع باگها، درک کد و اصلاح آن میشود. ♻️ طراحی مجدد (The Grand Redesign in the Sky) تصمیم به بازنویسی کامل سیستم که معمولاً نتیجه انباشت کدهای بد است. این فرآیند هزینهبر و زمانبر است و اغلب منجر به تکرار مشکلات قبلی در سیستم جدید میشود و مسئله اینجاست که در بسیاری از موارد این بازنویسی نه تنها مشکل را حل نمیکند، بلکه مشکلات جدیدی را نیز به همراه دارد. 🎨 هنری به نام کدنویسی تمیز نوشتن کد تمیز، بیشک یک هنر محسوب میشود. هنری که بیان میکند هر جزء از سامانه باید دقیقاً کار مورد انتظار را انجام دهد. برای مثال تصور کنید با کدی مواجه میشوید که در آن هر تابع، علاوه بر وظیفه اصلی خود، کارهای جانبی دیگری مانند مدیریت لاگها، بهروزرسانی دیتابیس یا حتی محاسبات اضافی را انجام میدهد. این توابع بزرگ و نامفهوم، تغییرات در کد را دشوار و پرخطر میکنند. 📑 چگونه تمیز کد بزنیم؟ برای تبدیل شدن به یک کدنویس هنرمند باید به این نکات توجه کنیم: ۱. نامگذاریهای معنادار (Meaningful Naming) انتخاب نامهای گویا، رسمی و قابل تلفظ با مفهوم مثبت و به شیوه نامگذاری مناسب(Naming convention) برای متغیرها، توابع و کلاسها ۲. پرهیز از تکرار (Avoid Duplication) تکرار کد یا یک منطق در برنامه، یکی از بدترین مشکلات در نگهداری و توسعه برنامه ۳. توجه به جزئیات (Attention to Details) مواردی مانند تورفتگی(Indentation)، فاصلهها(Spacing)، کامنتگذاریها و حذف کدهای بلااستفاده، هرچند جزئی اما بسیار تاثیرگذار در بهبود خوانایی و کیفیت کد. ۴. وابستگی حداقلی (Minimal Dependencies) وابستگیهای اضافی بین ماژولها و کلاسها باعث و بانی پیچیدگی و کاهش انعطافپذیری ۵. کد گویا (Expressive Code) استفاده از نامهای معنادار، توابع کوچک، استفاده از متودهای مناسب و روشهای ساده برای پیادهسازی برنامه به منظور قابل درکتر شدن کد ۶. تستپذیری (Testability) سرعت و سادگی در بررسی توابع و کلاسها با تستهای واحد(Unit Tests) قوانین طلایی در کدنویسی اصولی: ⏳ قانون LeBlanc's Law: Later Equals Never بسیاری از توسعهدهندگان، کدهای خود را به صورت سریع و بدون رعایت اصول تمیزنویسی مینویسند ومیگویند "بعدا" آن را تمیز خواهند کرد. اما معمولا
این "بعدا" هیچگاه فرا نمیرسد.بنابراین، بهتر است از همان ابتدا کد را به صورت تمیز و باکیفیت بنویسیم تا از انباشته شدن کدهای ضعیف جلوگیری کنیم. 🏕 قانون The Boy Scout Rule اصل مهم دیگری که در بحث نوشتن کد تمیز مطرح میشود، قانون پیشاهنگ است:
همیشه کمپ را تمیزتر از زمانی که وارد آن شدید، ترک کنید.در دنیای کدنویسی، این به معنای آن است که هر بار وارد بخشی از کد میشوید، آن را بهبود دهید. مثلا اگر وظیفه شما تنها رفع یک باگ مشخص است، تلاش کنید مشکلات کوچک دیگری که در کد مشاهده میکنید را نیز برطرف کنید. 🔑 به یاد داشته باشید نوشتن کد تمیز تنها یک مهارت فنی نیست؛ بلکه نوعی نگرش و طرز فکر است. شما به عنوان یک برنامهنویس حرفهای باید به کیفیت کدی که مینویسید اهمیت دهید و همواره تلاش کنید آن را به منظور افزایش خوانایی و سرعت توسعه و اجرا بهبود ببخشید. 🔖 #Programming, #برنامه_نویسی 👤 Soheil 💎 Channel: @DevelopixChannel
☄️ ایستگاه یکم: کد تمیز
نوشتن کدی که هم از نظر عملکرد و هم از نظر ساختار قابل اطمینان باشد، نیازمند رعایت اصولی است که به آن "کد تمیز"(Clean Code) گفته میشود. کد تمیز چیزی فراتر از کدی است که فقط کار کند؛ کد باید به گونهای نوشته شود که به راحتی قابل خواندن، فهمیدن، تغییر و نگهداری باشد. فصل اول کتاب Clean Code: A Handbook of Agile Software Craftsmanship نوشته Robert Cecil Martin با توضیح اهمیت نوشتن کد تمیز و بررسی تأثیرات کدهای بد بر روی عملکرد پروژهها، به اصول و الگوهای نوشتن کدهای باکیفیت میپردازد.
🔖 #Programming, #برنامه_نویسی
👤 Soheil
💎 Channel: @DevelopixChannel
🚀 چگونه یک پیام کامیت(Commit Message) حرفهای بنویسیم؟
نوشتن پیامهای کامیت مناسب در گیت یکی از مهمترین مهارتهایی است که هر توسعهدهنده باید بر آن مسلط باشد. پیامهای خوانا و معنادار نه تنها به مستندسازی هر چه بهتر تغییرات کمک میکنند، بلکه فرآیند عیبیابی و همکاری تیمی را نیز بهبود میبخشند. از سوی دیگر پیامهای غیرحرفهای مثل "a few changes" یا "Update Files" میتوانند توسعه تیمی یا بازگشت به تغییرات خاکخورده را سخت کنند.
⁉️ چرا نوشتن پیام کامیت خوب اهمیت دارد؟
📚 مستندسازی دقیق(Documentaion):
پیامهای کامیت در واقع مستندات زندهای هستند که باید تغییرات پروژه را به صورت شفاف ثبت کنند. بهعنوان مثال، فرض کنید که بعد از چند ماه نیاز به بازگشت به یک نسخه قدیمی دارید، پیامهای اصولی کمک میکنند بدون سردرگمی، متوجه شوید در هر گام، چه تغییراتی صورت گرفته است.
🔧 تسهیل عیبیابی(Debugging):
وقتی برنامهتان دچار خطا شود، با ابزارهایی مثل git bisect میتوانید ایرادات را پیدا کنید. پیامهای کامیت دقیق نشان میدهند کدام تغییرات ممکن است عامل بروز مشکل باشند. مثلاً اگر خطایی در سیستم احراز هویت رخ دهد پیامهایی مثل "fix(auth): resolve login issue for users with special characters in username"، به مقادیر زیادی در زمان صرفهجویی میکند.
👥 همکاری بهتر:
در پروژههای تیمی، پیامهای کامیت واضح برای دیگر اعضا بسیار حیاتی میشود. به عنوان مثال، اگر یک عضو پیامی مثل "fixed stuff" بنویسد، همتیمیهایی که از نداشتن علم غیب رنج میبرند نمیتوانند به درستی متوجه تغییرات شوند!
یک پیام کامیت خوب نشان می دهد که آیا توسعه دهنده یک همکار خوب است یا خیر. - پیتر هاترر📄 تولید خودکار CHANGELOG: با رعایت استانداردهایی مثل Conventional Commits در نوشتن توضیحات مربوط به کامیت، ابزارها میتوانند فایلهای CHANGELOG را بهصورت خودکار تولید کنند که برای نسخهبندی و مدیریت نسخهها(Versioning) در پروژههای بزرگ بسیار مهم است. ⚙️ بهبود عملکرد ابزارهای خودکارسازی(Automation Tools): پیامهای کامیت دقیق به ابزارهای CI/CD کمک میکنند تا تغییرات شما را به درستی پیگیری کنند. ✍️ چه نکاتی را باید در نوشتن پیام کامیت رعایت کنیم؟ با خواندن پیامهای کامیت باید متوجه شد چه دسته از تغییراتی به چه منظور و در کدام قسمت صورت گرفتهاند. 📑 ساختار پیام کامیت: پیامهای کامیت بهتر است در سه بخش عنوان(Header)، بدنه(Body)، و پاورقی(Footer) و در چنین الگویی نوشته شوند:
[type]([optional scope]): [subject] [optional body] [optional footer]1⃣ بخش آغازین یا Head: قسمت اصلی پیام؛ شامل نوع(Type)، محدوده تغییرات(Scope) و شرح مختصر تغییرات در حدود ۵۰ حرف است(بدون نقطه در پایان).
perf(api): Reduce response time for user data retrieval by optimizing queriesانواع کامیت نیز عبارتند از: اضافه کردن یک ویژگی جدید: feat رفع یک باگ: fix بازسازی ساختار کد بدون تغییر در رفتار: refactor بهبود عملکرد: perf تغییرات ظاهری کد: style اضافه کردن یا بهبود تستها: test تغییر مستندات: docs تغییر تنظیمات CI/CD یا ابزار ساخت(Build): build تغییرات در زیرساخت(Infrastructure): ops تغییرات متفرقه و بیتاثیر بر منطق اصلی: chore 2⃣ بدنه یا Description: شامل توضیحات دقیقتر درباره تغییرات است و باید پاسخگوی این باشد که چه تغییراتی، چرا و با چه تاثیراتی اعمال شدهاند.
This commit optimizes the user data retrieval process in the API to enhance performance and reduce response times. - Refactored SQL queries to minimize joins and improve execution speed. - Implemented caching for frequently accessed user data, reducing database load. - User data retrieval was previously slow, impacting the overall user experience, especially during peak usage times. - The changes also include unit tests to ensure that performance enhancements do not introduce regressions.3⃣ بخش پایانی یا Metadata: برای ارائه اطلاعات تکمیلی استفاده میشود، مانند تغییرات ناسازگار(Breaking Changes) یا ارجاع به شماره Issue.
BREAKING CHANGE: The user data retrieval method has been optimized. The previous method may result in longer response times and is now deprecated. Closes #269📌 در نهایت باید گفت مهمترین بخش یک پیام کامیت شفاف و واضح بودن آن است. چنین پیامهایی به شمای آینده و همکارانتان این امکان را میدهند که به راحتی به توسعه برنامه بپردازند. 🔖 #Programming, #برنامه_نویسی 👤 Soheil 💎 Channel: @DevelopixChannel
💡دیزاین پترنها در برنامهنویسی: ابزارهایی برای حل مشکلات تکراری
دیزاین پترنها (Design Patterns) راهحلهای قابلاستفاده مجدد برای مشکلات متداولی هستند که در فرآیند طراحی و توسعه نرمافزار با آنها مواجه میشویم. این الگوها نه تنها کد ما را خواناتر و نگهداریپذیرتر میکنند، بلکه به ما کمک میکنند تا معماری بهتری برای پروژههای خود ایجاد کنیم. در این پست به معرفی مهمترین انواع دیزاین پترنها میپردازیم.
🛠 دستهبندی دیزاین پترنها
دیزاین پترنها به طور کلی به سه دسته تقسیم میشوند:
🔵پترنهای ایجاد (Creational Patterns)
🔵پترنهای ساختاری (Structural Patterns)
🔵پترنهای رفتاری (Behavioral Patterns)
1. پترنهای ایجاد (Creational Patterns) 🏗
این پترنها به نحوه ایجاد و مدیریت اشیا در برنامهها میپردازند. آنها به ما کمک میکنند تا فرآیند ساخت اشیا را بهینهتر و منعطفتر کنیم.
🔵پترن Singleton: اطمینان میدهد که تنها یک نمونه از یک کلاس در طول اجرای برنامه ایجاد میشود. مثال: دسترسی به یک دیتابیس مشترک.
🔵پترن Factory Method: وظیفه ایجاد اشیا را به کلاسهای زیرمجموعه واگذار میکند. مثال: ایجاد اشیای مختلف بدون دانستن نوع دقیق آنها در زمان کدنویسی.
🔵پترن Builder: ساخت اشیا پیچیده را با استفاده از یک رابط ساده تسهیل میکند. مثال: ساخت یک شیء با چندین فیلد اختیاری.
2. پترنهای ساختاری (Structural Patterns) 🏛
این دسته از پترنها به نحوه ترکیب کلاسها و اشیا برای ایجاد ساختارهای بزرگتر و پیچیدهتر میپردازند.
🔵پترن Adapter: رابطی بین دو کلاس ناسازگار ایجاد میکند تا بتوانند با هم کار کنند. مثال: تبدیل یک API قدیمی به یک API جدید.
🔵پترن Decorator: به شما اجازه میدهد تا ویژگیهای یک شیء را بدون تغییر در کد اصلی آن گسترش دهید. مثال: اضافه کردن ویژگیهای جدید به یک شیء مانند امکان رمزگذاری یک فایل.
🔵پترن Facade: یک رابط ساده برای مجموعهای از کلاسهای پیچیده ارائه میدهد. مثال: استفاده از یک کلاس ساده برای کار با چندین سیستم پیچیده مانند پایگاه داده و سیستم فایل.
3. پترنهای رفتاری (Behavioral Patterns) 🔄
این پترنها به تعاملات و ارتباطات بین اشیا و کلاسها پرداخته و به بهبود توزیع وظایف در بین آنها کمک میکنند.
🔵پترن Observer: یک شیء تغییرات در یک شیء دیگر را نظارت میکند و بهروزرسانیها را دریافت میکند. مثال: سیستم اعلانها یا فید خبری.
🔵پترن Strategy: به شما اجازه میدهد که مجموعهای از الگوریتمها را تعریف کرده و در زمان اجرا یکی از آنها را انتخاب کنید. مثال: انتخاب الگوریتمهای مختلف برای مرتبسازی دادهها.
🔵پترن Command: درخواستها را بهعنوان اشیا تبدیل کرده و به شما امکان میدهد درخواستها را برنامهریزی، ذخیره و لغو کنید. مثال: پیادهسازی undo/redo در برنامههای ویرایش متن.
🎯 نتیجهگیری
استفاده از دیزاین پترنها باعث میشود تا کد شما منظمتر، نگهداریپذیرتر و قابل توسعهتر باشد. این الگوها، ابزارهایی هستند که به توسعهدهندگان کمک میکنند تا به شیوهای استاندارد و کارآمد مشکلات رایج را حل کنند.
آشنایی با این دیزاین پترنها و استفاده صحیح از آنها در پروژهها میتواند شما را به یک برنامهنویس حرفهایتر و موفقتر تبدیل کند!
💎 Channel: @DevelopixChannel
