نکات کلیدی برنامه نویسی که باید به آن توجه کنید (10 نکته مهم)
نکات کلیدی برنامه نویسی
برنامه نویسی مبحثی است که کم و بیش همه افراد علاقه مند به دنیای فناوری اطلاعات و ارتباطات به آن اشتیاق دارند. توسعه دهندگان برنامه نویسی با توجه به پیچیدگی و تنوع زیاد علم کامپیوتر و برنامه نویسی، باید به برخی نکات کلیدی توجه کنند تا بتوانند کد بهتری نوشته و پروژه های موفق تری داشته باشند. در ادامه، نکات مهم برنامه نویسی مطرح می شود. تا انتهای مقاله با ما همراه باشید.
خوانایی کد
یک کد خوانا معمولاً از کامنت های کافی برخوردار است تا هر کسی که با آن سر و کار دارد، بتواند بدون نیاز به توضیحات اضافه به راحتی متوجه شود هر قسمت از کد چه کاری انجام می دهد. نام گذاری مناسب برای متغیر ها و توابع بسیار حیاتی است تا کد سازمان یافته و قابل درک باشد. همچنین، ایجاد ساختار یکنواخت در کد و جلوگیری از استفاده از اسامی بی معنی یا اختصاری به خوانایی آن کمک می کند.
درک خوانایی کد بهبود کیفیت کلی پروژه و توسعه آسان تر آن را تضمین می کند. این امر باعث می شود تا تغییرات و افزودن قابلیت های جدید به برنامه با ریسک کمتری صورت گیرد. به طور کلی، خوانایی کد به عنوان یک اصل اساسی در توسعه نرم افزار ها تلقی می شود و اهمیت بالایی در تیم های برنامه نویسی دارد.
کد سازگار با اصول SOLID
اصول SOLID یک مجموعه از اصول طراحی نرم افزار هستند که توسعه دهندگان را در ایجاد کدی انعطاف پذیر، توسعه پذیر و قابل نگهداری کمک می کنند. این اصول بر اساس ایدههای Robert C. Martin بنا شده و شامل پنج اصل زیر است:
- اصل تک مسئولیتی (SRP): این اصل بیان می کند که یک کلاس باید فقط یک مسئولیت داشته باشد. به عبارت دیگر، یک کلاس باید فقط یک دلیل برای تغییر داشته باشد. این اصل به تفکیک مسئولیت ها و کاهش وابستگی ها کمک می کند.
- اصل باز/ بسته (OCP): این اصل اعلام می کند که یک کلاس باید برای توسعه باز و برای اصلاح بسته باشد. به این معنا که ما باید قابلیت افزودن ویژگی های جدید به یک سیستم را داشته باشیم بدون این که بخش های موجود را تغییر دهیم.
- اصل جایگزینی لیسکو (LSP): این اصل به این ایده می پردازد که هر زیر نوع (subclass) باید بتواند بدون این که عملکرد برنامه را به خطر بیندازد به جای پدرش (superclass) قرار گیرد. یعنی، شیء ها را باید بتوان به جای یکدیگر استفاده کرد بدون این که این استفاده تاثیر مخربی داشته باشد.
- اصل جداسازی رابط (ISP): این اصل می گوید که یک کلاس نباید ویژگی های اضافی که برای آن لزومی ندارد، پیاده سازی کند. به جای این که یک واسط بزرگ داشته باشیم، باید چندین واسط کوچک داشته باشیم که هرکدام به یک مسئولیت محدود شده باشند.
- اصل وارونگی وابستگی (DIP): این اصل به معکوس کردن وابستگی ها بین لایه ها در یک سیستم اشاره دارد. به جای این که لایه های پایین تر به لایه های بالاتر وابسته باشند، باید وابستگی به انتها معکوس شده باشد. این اصل به افزایش انعطافپذیری کمک می کند.
کدی که با اصول SOLID سازگار است، علاوه بر اینکه بهبود خوانایی دارد، از انعطاف پذیری بالا، قابل توسعه پذیری و کیفیت کافی برخوردار است. این اصول به توسعه دهندگان کمک می کنند تا ساختار کد خود را به گونه ای طراحی کنند که در آینده تغییرات را به راحتی اعمال کرده و از مشکلات احتمالی جلوگیری کند.
تست واحد
تست واحد یک نوع تست نرم افزاری است که بر روی کد مربوط به یک واحد (یا قسمت) کوچک از برنامه انجام می شود. واحد معمولاً یک تابع یا متد کوچک در برنامه است که یک وظیفه مشخص را انجام می دهد. هدف اصلی تست واحد، اطمینان از صحت عملکرد درست واحد مورد نظر است. مهمترین ویژگی های تست واحد به شرح زیر هستند:
- ایزوله بودن: تست واحد باید مستقل باشد، به این معنا که نباید از سایر قسمت ها یا وابستگی های خارجی برنامه تأثیر بگیرد. این خصوصیت به کاهش احتمال وابستگی ها و مشکلات ناشی از تغییرات در بخش های دیگر کمک می کند.
- تکرار پذیری: تست واحد باید قابلیت تکرار داشته باشد، یعنی هر بار که اجرا می شود، نتیجه یکسانی را تولید کند. این ویژگی به تشخیص اشکالات تصادفی و تغییرات غیر قابل پیش بینی کمک می کند.
- سرعت: تست واحد باید به سرعت اجرا شود تا بتوان به صورت مکرر آن را اجرا کرد و به تست اتوماتیک واحدی تبدیل کرد.
- اطلاعات کافی: تست واحد باید اطلاعات کافی در مورد دلیل شکست یا موفقیت ارائه کند. این اطلاعات برای توسعه دهندگان بسیار حیاتی هستند تا بتوانند به سرعت خطا ها را رفع کنند.
- تکیه بر واحد مورد تست: هر تست واحد باید تنها یک وظیفه مشخصی را تست کند. این اصل باعث می شود تست واحد به طور دقیق تر و با کمترین میزان کد نوشته شود.
- تشخیص مشکلات سریع: تست واحد باید به سرعت مشکلات در کد را تشخیص دهد و این امکان را فراهم کند که برنامه نویسان بتوانند به سرعت به این مشکلات واکنش نشان دهند.
تست واحد به عنوان بخشی از فرآیند توسعه نرم افزار بهبود کیفیت کد، حفظ پایداری برنامه و ایجاد اعتماد در تیم توسعه کمک می کند. این تست ها به عنوان پایه ایمنی برنامه نویسی شناخته می شوند و تغییرات در کد را با اطمینان بیشتری ممکن می سازند.
مدیریت خطا ها
مدیریت خطا ها یک جنبه اساسی در توسعه نرم افزار است که به تشخیص رصد، و مدیریت خطا های احتمالی در یک برنامه می پردازد. هر برنامهای ممکن است با موقعیت های نا خواسته و خطا روبرو شود. مدیریت خطا ها به توسعه دهندگان کمک می کند اطمینان حاصل کنند که برنامه در هر شرایطی به درستی عمل کند.
- تشخیص خطا: مدیریت خطا ابتدا نیازمند تشخیص خطا ها است. ابتدا باید برنامه نویسان مکان های ممکن بروز خطا را شناسایی کنند و ابزار های مناسب را برای نظارت بر برنامه و ثبت خطا به کار برند.
- ثبت و گزارش خطا: پس از تشخیص خطا، مهم است که خطا ها به درستی ثبت و گزارش شوند. این امر شامل نگهداری یک لاگ خطا (Error Log) می شود که شامل اطلاعات مفصلی از جمله زمان بروز خطا، مکان، نوع خطا و شرایط اجرا است.
- بررسی و تحلیل خطا: مدیریت خطا به توسعه دهندگان این امکان را می دهد که خطا ها را بررسی و تحلیل کنند. این فرایند به شناخت دقیق تر دلیل بروز خطا ها، شناسایی الگو های متداول خطا ها و پیشگیری از تکرار آن ها کمک می کند.
- مدیریت خطا در زمان اجرا: این امر شامل استفاده از مکانیسم های زبان برنامه نویسی برای مدیریت خطا ها در زمان اجرا است.
- اطلاع رسانی به کاربر: در صورت لزوم، مدیریت خطا می تواند به کاربران اطلاع دهد که خطایی رخ داده است و نیاز به اقدام ایشان برای رفع یا گزارش خطا دارد. این اطلاع رسانی باید برای کاربران قابل فهم باشد.
- پیگیری و رفع خطا :مدیریت خطا به توسعه دهندگان کمک می کند تا خطا ها را پیگیری کرده و به سرعت به رفع آن ها بپردازند. استفاده از ابزار های پیگیری خطا مانند Sentry یا Bugsnag نیز در این فرآیند بسیار کارآمد است.
عملکرد بهینه
در حوزه الگوریتم ها، عملکرد بهینه به طراحی الگوریتم هایی اشاره دارد که زمان اجرا و مصرف حافظه کمتری دارند. بهینه سازی الگوریتم ها در کاربرد هایی مانند جستجو، مرتب سازی و پردازش داده های بزرگ اهمیت دارد.
- مدیریت منابع بهینه: در یک سیستم، منابع مانند حافظه، پردازنده و شبکه محدود هستند. عملکرد بهینه در اینجا به مدیریت صحیح منابع و استفاده بهینه از آن ها اشاره دارد تا برنامه بتواند با کمترین منابع ممکن بهترین خدمات را ارائه دهد.
- بهینه سازی کد: نوشتن کد با کارایی بالا و بهینه می تواند به سرعت اجرا و مصرف منابع کمتر کمک کند که شامل بهینه سازی الگوریتم ها، استفاده از ساختار های داده مناسب، کاهش تعداد عملیات ناکارآمد و مدیریت حافظه بهینه است.
- تحلیل و بهینه سازی عملکرد سیستم: بررسی و نظارت بر عملکرد سیستم در زمان واقعی، شناسایی نقاط ضعف و اعمال بهینه سازی های لازم به این دسته از عملکرد بهینه اشاره دارد.
- استفاده از کش: مکانیزم های کش (caching) برای ذخیره نتایج محاسبات پیشین و استفاده مجدد از آن ها به جای محاسبه مجدد، می توانند عملکرد برنامه را بهبود بخشیده و زمان اجرا را کاهش دهد.
- توزیع بهینه وظایف: در سیستم های توزیع شده، بهینه سازی توزیع وظایف و مدیریت ارتباطات بین اجزای مختلف نیز نقش مهمی در بهبود عملکرد دارد.
- آنالیز و بهینه سازی پایگاه داده: طراحی بهینه شده پایگاه داده، شامل ساختار مناسب جداول، بهینه سازی کوئری ها و استفاده از ابزار های مانیتورینگ می تواند به کارایی و عملکرد بهتر برنامه کمک کند.
عملکرد بهینه مهمترین هدف توسعه دهندگان است زیرا این امر به تأثیر مستقیم بر تجربه کاربران، مصرف منابع و موفقیت کلی یک نرم افزار یا سیستم دارد.
اگر تمایل به دریافت اطلاعات بیشتری در مورد دورههای آموزشی یا تخصص اشتغال و مهاجرت دارید میتوانید از راه های ارتباطی زیر استفاده نمایید.
استفاده از طراحی الگو ها
استفاده از طراحی الگو ها به معنای استفاده از الگو های طراحی معمول و معتبر در توسعه نرم افزار است. الگو های طراحی مجموعه ای از قوانین و تجربیات مشترک هستند که توسعه دهندگان به تحلیل، طراحی و پیاده سازی نرم افزار موفق از طریق استفاده از الگو هایی که قبلاً توسط دیگران مورد آزمون قرار گرفته اند، کمک می کنند. مزایای استفاده از طراحی الگو ها عبارتند از:
- استفاده از تجربیات گذشته: طراحی الگو ها براساس تجربیات گذشته توسعه دهندگان استوار است. این الگو ها نتیجه تجربیات جمعی توسعه دهندگان در مورد راه حل های مشترک به مسائل مختلف هستند.
- کاهش خطا ها و مشکلات: الگو های طراحی بر اساس آزمون و خطا های گذشته ایجاد شده اند. با استفاده از این الگو ها، احتمال وقوع خطا ها و مشکلات کاهش می یابد زیرا راه حل هایی که قبلاً برای مسائل مشابه به کار گرفته اند، ثابت شده اند.
- افزایش قابلیت نگهداری: الگو های طراحی اغلب با توجه به اصول قابلیت نگهداری و توسعه پذیری ایجاد شده اند. استفاده از این الگو ها باعث می شود که کد برنامه قابل نگهداری تر و توسعه پذیر تر باشد.
- کاهش زمان توسعه: با استفاده از الگو های طراحی، توسعه دهندگان می توانند از راهکار های آماده برای مسائل مشترک استفاده کنند. این باعث می شود که زمان توسعه کاهش یابد و برنامه به سرعت و با کیفیت تر توسعه داده شود.
- ارتقاء تعامل و تبادل دانش: استفاده از الگو های طراحی باعث ایجاد یک زبان مشترک در توسعه دهندگان می شود. این باعث تسهیل تعامل و تبادل دانش بین اعضای تیم می شود و به بهبود تجربه کل تیم کمک می کند.
- استاندارد سازی و یکنواختی: الگو های طراحی می توانند به وسیله ایجاد استاندارد های مشترک در توسعه برنامه و یکنواختی کد کمک کنند.
مدیریت حافظه و منابع
مدیریت حافظه و منابع یک جنبه اساسی از توسعه نرم افزار است که به بهینه سازی و کنترل استفاده از حافظه و منابع سیستم می پردازد.. عناصر اصلی مدیریت حافظه و منابع عبارتند از:
- تخصیص حافظه: مدیریت حافظه دربردارنده تخصیص حافظه به برنامه های در حال اجرا است. این فرآیند باید به گونه ای انجام شود که از مصرف بی مورد حافظه جلوگیری کند.
- آزاد سازی حافظه: آزاد سازی حافظه یعنی اطمینان از آن که حافظه ای که تخصیص یافته بوده و دیگر لازم نیست، آزاد شود و به سیستم بازگردد. این کار باعث افزایش بهره وری سیستم می شود.
- مدیریت منابع سیستم: مدیریت منابع سیستم شامل کنترل استفاده از پردازنده، شبکه، دیسک و دیگر منابع سخت افزاری است. توزیع عادلانه منابع به برنامه ها و پروسه ها و جلوگیری از مصرف بیش از حد یک منبع خاص از دیگر چالش های مدیریت منابع است.
- کنترل دسترسی به فایل ها و داده ها: مدیریت حقوق دسترسی به فایل ها و داده ها نقش مهمی در امانت نگهداری و اطمینان از امنیت سیستم دارد. این کنترل برای جلوگیری از دسترسی غیر مجاز به منابع مهم است.
اهداف مدیریت حافظه و منابع
- کاهش مصرف حافظه
- افزایش بهره وری
- جلوگیری از خطا های حافظه
- مدیریت عدم قطعیت
- تضمین امنیت
توسعه متداول
توسعه متداول یک فرآیند چرخه ای است که به توسعه و تولید نرم افزار از ابتدا تا انتها می پردازد. این چرخه متشکل از مراحل مختلفی است که هر کدام وظیفه ها و اهداف خود را دارند و به صورت مرتب و مترادف با توسعه نرم افزار اجرا می شوند. این مراحل عبارتند از تحلیل، طراحی، پیادهسازی، آزمون، انتشار و نگهداری. در ادامه هر مرحله به طور کلی توضیح داده می شود:
- تحلیل: در این مرحله، نیازمندی های سیستم مورد بررسی قرار می گیرد و تحلیلگران با ارتباط با مشتریان و استفاده از ابزار ها و متد های مناسب، نیازها و اهداف پروژه را شناسایی می کنند.
- طراحی: طراحی نرم افزار بر اساس نیاز ها و تحلیل انجام شده صورت می گیرد. در این مرحله، ساختار کلی سیستم و جزئیات اجرایی طراحی می شود. این شامل طراحی ساختار داده، الگوریتم ها و رابطهای کاربری است.
- پیاده سازی: در این مرحله، طراحی به کد منبع تبدیل می شود. برنامه نویسان نرم افزار کد را می نویسند و اطمینان حاصل می شود که کد پیاده سازی شده تا حد ممکن با طراحی مطابقت دارد.
- آزمون: در مرحله آزمون، کد پیاده سازی شده توسط گروه تست ها یا تیم های کنترل کیفیت به آزمون تحت شرایط مختلف می گذارند. هدف این مرحله اطمینان از کیفیت و عملکرد صحیح نرم افزار است.
- انتشار: پس از تایید کامل و تست موفقیت آمیز، نرم افزار به محیط عملیاتی منتقل می شود. این مرحله شامل توزیع و نصب نرم افزار برای استفاده عمومی است.
- نگهداری: پس از انتشار، نرم افزار نیاز به نگهداری دارد. این شامل اصلاح باگ ها، اضافه کردن ویژگی های جدید، به روز رسانی های امنیتی و هر تغییر مورد نیاز دیگری است.
هر مرحله از توسعه متداول مختصراً بر اساس نیاز ها و وظایفی که در آن انجام می شوند توضیح داده شده است. این چرخه به صورت مستمر اجرا می شود تا نیاز ها و تغییرات جدید را پاسخ دهد.
توجه به امنیت
توجه به امنیت یکی از جنبه های حیاتی در توسعه نرم افزار است. امنیت در اینجا به حفاظت از اطلاعات حساس، پیشگیری از حملات و تضمین کیفیت و اعتماد در محصول نرم افزاری اشاره دارد. در زیر، نکات مهمی که در توسعه نرم افزار باید به آن ها توجه شود، آورده شده است:
- تحلیل ریسک امنیتی: از ابتدای فرآیند توسعه، تحلیل ریسک امنیتی باید انجام شود. این ارزیابی شامل شناسایی و تجزیه و تحلیل محتمل ترین تهدید ها و ضعف ها است.
- استفاده از استاندارد های امنیتی: اطمینان حاصل کنید که توسعه دهندگان از استاندارد ها و راهکار های امنیتی مربوط استفاده می کنند.
- توسعه امنیتی: امنیت باید به طور فعال در تمام مراحل توسعه در نظر گرفته شود. توسعه دهندگان باید به اصول توسعه امنیتی توجه داشته باشند و از الگو ها و تکنیک هایی که امنیت را تقویت می کنند، استفاده کنند.
- آموزش توسعه دهندگان: توسعه دهندگان باید به روز رسانی شوند و آموزش های مرتبط با امنیت را دریافت کنند. به روز بودن در آگاهی از تهدیدات امنیتی و تکنیک های مبارزه با آن ها ضروری است.
- آزمون امنیتی: قبل از انتشار، باید آزمون امنیتی اجرا شود. این آزمون شامل بررسی توانایی سیستم در مقابل حملات مختلف و شناسایی آسیب پذیری ها می شود.
- مدیریت دسترسی: مدیریت دسترسی به داده ها و قابلیت های سیستم بسیار حائز اهمیت است. اطمینان حاصل کنید که هر کاربر یا سیستم فقط به حداقل دسترسی های لازم برای انجام وظایف خود دسترسی داشته باشد.
- رمز نگاری: اطلاعات مهم و حساس باید به کمک رمز نگاری محافظت شوند.
- آپدیت مداوم: سیستم باید به روز نگه داشته شود و همهی نقاط آسیب پذیر با آخرین اصلاحات امنیتی و به روز رسانی ها مجهز شوند.
- مانیتورینگ و ضبط لاگ: سیستم باید مورد مانیتورینگ قرار گیرد تا فعالیت های مشکوک یا حملات امنیتی شناسایی شوند. همچنین لاگ های سیستم باید به طور منظم بررسی شوند تا فعالیت های ناخواسته تشخیص داده شود.
- آموزش و حفاظت از کاربران: آموزش کاربران نقش مهمی در امنیت اطلاعات دارد. کاربران باید آگاهی کافی در مورد تهدیدات امنیتی داشته باشند و به عنوان یک لایه امنیتی موثر عمل کنند.
توجه به امنیت باید به صورت مداوم و به عنوان یک عنصر اساسی در فرآیند توسعه نرم افزار تلقی شود. این امر باعث حفظ اعتماد مشتریان، کاهش ریسکها و ارتقاء سطح امنیت سیستم می شود.
اگر تمایل به دریافت اطلاعات بیشتری در مورد دورههای آموزشی یا تخصص اشتغال و مهاجرت دارید میتوانید از راه های ارتباطی زیر استفاده نمایید.
آگاهی از تکنولوژیهای جدید
آگاهی از تکنولوژیهای جدید به معنای داشتن دانش و درک در مورد نوآوری ها و پیشرفت های تکنولوژیک است که در حال حاضر یا در آینده قابل انتظار هستند. این آگاهی به توسعه دهندگان، کسب و کار ها، تحقیق و توسعه، و افراد علاقهمند به حوزه های فناوری کمک می کند تا با دنیای پویای تکنولوژی همگام باشند. در زیر به چند نکته مهم در خصوص آگاهی از تکنولوژی های جدید اشاره شده است:
- پیگیری اخبار فناوری: پیگیری اخبار فناوری از طریق وب سایت ها، مجلات و منابع خبری معتبر به شما کمک می کند تا با آخرین پیشرفت ها و تحولات در علوم کامپیوتر، اینترنت اشیاء (IoT)، هوش مصنوعی و سایر زمینه ها آشنا شوید.
- شرکت در کنفرانس ها و رویداد های فناوری: شرکت در کنفرانس ها، نمایشگاه ها و رویداد های فناوری به شما فرصت می دهد تا با توسعه دهندگان برجسته در ارتباط باشید. این جلسات به دانش فناورانه شما افزوده و فرصت تبادل ایده و تجربیات را فراهم می سازند.
- دنبال کردن شبکه های اجتماعی تخصصی: شبکه های اجتماعی تخصصی مانند LinkedIn و Twitter فرصت بسیاری برای ارتباط با افرادی که در حوزه های مورد علاقه شما فعالیت می کنند، فراهم می کند. دنبال کردن افراد برجسته، گروه های تخصصی و پست های مرتبط با تکنولوژی به شما امکان می دهد تا به آخرین اطلاعات و نظرات دسترسی پیدا کنید.
- مشارکت در اجتماعات برنامه نویسی و توسعه دهندگان: فعالیت در اجتماعات برنامه نویسی و توسعه دهندگان مثل Stack Overflow، GitHub، یا Reddit به شما این امکان را می دهد که با مشکلات و چالش های توسعه نرم افزار مواجه شوید و از تجربیات دیگران بهره مند شوید.
- شرکت در دوره ها و آموزشهای آنلاین: دوره ها و آموزش های آنلاین مثل Coursera، Udacity، و edX امکان یادگیری تکنیک ها و مهارت های جدید در حوزه تکنولوژی را فراهم می کند.
- ارتباط با جوانب مختلف تکنولوژی: در آگاهی از تکنولوژی های جدید، مهم است که نه تنها به زمینهی اصلی خود، بلکه به حوزه های مرتبط مانند امنیت اطلاعات، توسعه وب، یادگیری ماشین و اینترنت اشیاء نیز توجه کنید.
- خود آموزی و پروژه های شخصی: خود آموزی و مشارکت در پروژه های شخصی به شما این امکان را می دهد که بهصورت عملی با تکنولوژی های جدید آشنا شوید و مهارت های خود را توسعه دهید.
سخن پایانی
در این مقاله نکاتی بیان شد که به ارتقای دانش تخصصی برنامه نویسان و شفافیت و خوانایی کد آن ها کمک خواهد کرد. برای حرفه ای شدن در مسیر کد نویسی علاوه بر رعایت نکات فوق، شرکت در دوره های با کیفیت مرتبط با این حوزه به شدت پیشنهاد می شود؛ چرا که روند یادگیری شما را تسریع و تسهیل می کند.
موسسه راشد مشهد سال هاست به برگزاری دوره های آموزشی در حوزه فناوری اطلاعات، برنامه نویسی به زبان های مختلف، امنیت و شبکه می پردازد و در این مسیر از مهارت و تخصص بهترین اساتید این حوزه در سطح کشور بهره می برد. این دوره ها از سطح مقدماتی تا پیشرفته در هر یک از صورت های حضوری، آنلاین، عمومی و خصوصی در قالب کلاس های پروژه محور و تعاملی برگزار می گردد. برای آشنایی با جزئیات کلاس ها به وب سایت موسسه به آدرس rashed.ir مراجعه فرمایید و یا با مشاوران ما در شعب راشد مشهد تماس بگیرید.
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام روز بخیر،برای خواهر زاده ام دنبال یه برنامه نویس خوب میگردم تا آموزش ببینه،الان سال اول دانشگاه ترم دوم هستش ،رشته کامپیوتر ،گرایش نرم افزار،معدل ۱۹،۶۹ شده،الان میخوام یه برنامه نویس عالی پیدا کنم بهش آموزش بده،حالا یا شما یا یکی شما معرفی کنید بهم ممنون میشم.چون شماره تماس شما رو ندارم ،اجازه بدید من شماره تماس بزارم ۰۹۳۰۰۲۰۸۳۱۵ مبین قنبری