در Juni Learning ، ما یک آکادمی آنلاین هستیم که دانش آموزان 1: 1 یا 1: 2 با یک مربی خصوصی کار می کنند. ما یک برنامه درسی کامل برنامه نویسی رایانه ای برای دانش آموزان 8 تا 18 ساله ارائه می دهیم. بسیاری از دانش آموزان جوان جونی سفر رمزگذاری خود را با Scratch آغاز می کنند ، به ویژه دانش آموزان زیر 12 سال. با استفاده از Scratch ، مربیان می توانند مهارت های ریاضی ، خواندن و تفکر انتقادی را در خود ایجاد کنند یا همه آنها را تنظیم کنند ، همه اینها در حالی است که دانش آموزان را برای رمزگذاری با فناوری بصری آموزش می دهند. درگیر کننده و طاقت فرسا نیست. دانش آموزان لازم نیست نگران جزئیات نحوی مانند علائم نگارشی و تورفتگی با خراش باشند. بعداً ، دانشجویان از طریق دوره های ما در پایتون ، جاوا ، HTML و Javascript پیشرفت می کنند ، تا مباحث مربوط به دانشگاه را در الگوریتم ها و ساختارهای داده پوشش می دهند.
برای کودکان 8 تا 11 ساله ، دوره Scratch Level 1: Game Superstar بر اصول Scratch متمرکز است: شنوندگان رویداد ، حلقه ها ، عبارات شرطی ، ورودی کاربر ، مختصات دکارتی ، متغیرها و پخش پیام. پس از اتمام این دوره ، دانش آموزان می توانند بازی های خود را در Scratch طراحی و برنامه ریزی کنند و آماده پیشرفت در Scratch سطح 2 هستند.
برای کودکان 9 تا 12 ساله ، دوره Scratch Level 2: Game Master ما با مفاهیم معرفی شده در سطح 1 خراش گسترش یافته و ایده های پیشرفته تری را شامل می شود ، از جمله حلقه های تو در تو ، شرط بندی های پیچیده ، شبیه سازی ، عملگرهای رشته ای و ریاضی ، لیست ها و توابع. پس از اتمام این دوره ، دانش آموزان تسلط کامل بر محیط Scratch دارند و آماده پیشرفت در سطح 1 پایتون هستند. در مورد توالی کامل دوره ما بیشتر بخوانید.
به طور کلی ، Scratch به دانش آموزان امکان می دهد تا مهارت های برنامه نویسی خود را با نمایش تصویری کدی که خواندن و اصلاح آن آسان است ، توسعه دهند. علاوه بر این ، به آنها زبان می دهد تا اصول کدگذاری را که در دوره های آینده پایتون مورد نیاز است ، درک کنند. این شامل مباحثی مانند حلقه ها ، شرطی ها ، متغیرها ، توابع ، اشکال زدایی و سایر مبانی برنامه نویسی است که بسیار قابل ترجمه برای سایر زبان های برنامه نویسی است.
برخی از رزروها در مورد برنامه نویسی عملکردی وجود دارد. درفواید برنامه نویسی این مقاله خواهید آموخت که چگونه و در کدام محیط استفاده از این الگوی می تواند درک ، آزمایش و پایداری نرم افزار را بهبود بخشد.چندین سال است که برنامه نویسی کاربردی تجدید حیات را تجربه می کند و هنوز فواید برنامه نویسی هم برای بسیاری از توسعه دهندگان نرم افزار افسانه است. این به عنوان دنیایی از اصطلاحات عجیب ، الگوهای فکری غیر متعارف و کد منبع سخت خوانده شده درک می شود ، که برای حل مسائل ریاضی نظری معایب برنامه نویسی بیشتر مناسب است تا برای ایجاد مولد نرم افزار معنی دار.
این عمل پایه و اساس هر سیستم الکترونیکی است که ما را احاطه کرده باشد. آیا از ماشین حساب استفاده می کنید؟ به میزان کم و بیش ، استفاده از برنامه نویسی را الزامی کرده است. آیا از iPad استفاده می کنید؟ بدیهی است فواید برنامه نویسی که کلیه نرم افزارها توسط برنامه نویسی ایجاد شده اند. و بنابراین می توانیم هزاران مثال ذکر کنیم.
با توجه به این وضعیت ، فواید برنامه نویسی یادگیری برنامه ریزی برای شناخت و درک بهتر دنیای کنونی ضروری به نظر می رسد -و بدیهی است از آینده-. اما این تنها مزیتی نیست که برنامه نویسی دارد. فواید برنامه نویسی گذشته از دیدگاه بهتری که دنیای امروز به ما می دهد ، برنامه نویسی تأثیرات مثبت بی شماری بر سلامتی و رشد فرد دارد. بعضی از آنها ... هستند:
- آنها دامنه توجه و تمرکز را بهبود می بخشند. برنامه نویسی یک نرم افزار نسبتاً پیچیده به معنای توجه بیشتر به هر کلمه ای است که در ویرایشگر کد می نویسیم. شما باید نام متغیرها ، قوانین زبانی را که در آن برنامه نویسی می کنید ، الگویی را که می خواهید برای کارکرد برنامه دنبال کنید ، به خاطر بسپارید ... نکاتی که باید د فواید برنامه نویسی ر نظر گرفته شوند بسیار زیاد است ، بنابراین توجه و تمرکز بسیار حیاتی است برای توسعه این کار مطالعات متعددی که در کودکان و بزرگسالان انجام شده این موضوع را تأیید می کند.
به عنوان مثال ، JavaScript در مرورگر می تواند موارد زیر را انجام دهد:
HTML جدیدی را به صفحه وب اضافه کنید ، محتوای موجود و سبک صفحه وب را اصلاح کنید.به رفتار کاربر پاسخ دهید ، به کلیک ماوس ، حرکت اشاره گر و فشار دکمه ها پاسخ دهید.درخواست های شبکه را به سرورهای راه دور ارسال کنید ، پرونده ها را بارگیری و بارگذاری کنید (اصطلاحاً فناوری های AJAX و COMET).
جاوا اسکریپت در مرورگر چه کاری نمی تواند انجام دهد؟
برای امنیت کاربر (اطلاعات) ، توانایی جاوا اسکریپت در مرورگر محدود است. هدف جلوگیری از بدست آوردن اطلاعات خصوصی کاربر یا آسیب رساندن به داده های کاربر توسط صفحات وب مخرب است.
نمونه هایی از این محدودیت ها عبارتند از:
JavaScript در صفحات وب نمی تواند پرونده های دلخواه را بر روی دیسک سخت بخواند ، بنویسد ، کپی کند و اجرا کند. به طور مستقیم به عملکردهای سیستم عامل دسترسی ندارد.
مرورگرهای مدرن به JavaScript اجازه می دهند برخی از عملیات مربوط به پرونده را انجام دهند ، اما این عملیات محدود است. فقط وقتی کاربر رفتار خاصی را انجام می دهد ، JavaScript می تواند این پرونده را دستکاری کند. به عنوان مثال ، کاربر پرونده را در مرورگر "کشیده و رها می کند" ، یا فایل را از طریق برچسب <input> انتخاب می کند.
روش های زیادی برای تعامل با دوربین ها / میکروفون ها و سایر دستگاه ها وجود دارد ، اما این موارد نیاز به اجازه صریح کاربر دارد. بنابراین ، صفحات وب دارای جاوا اسکریپت نباید بصورت مخفیانه یک وب کم برای مشاهده شما و ارسال اطلاعات شما به آژانس امنیت ملی راه اندازی کنند.
زبانه ها / پنجره های مختلف معمولاً یکدیگر را درک نمی کنند. بعضی اوقات ، بعضی اتصالات وجود دارد ، مانند یک برگه باز شده توسط JavaScript در یک برگه دیگر. اما حتی در این حالت ، اگر این دو برگه وب سایت یکسانی را باز نکنند (وب سایت هایی با نام دامنه ، پروتکل ها یا پورت های مختلف) ، آنها نمی توانند با یکدیگر ارتباط برقرار کنند.
این اصطلاحاً "همان استراتژی مبدا" است. برای حل مشکل "خط مشی منشا مشابه" ، هر دو برگه باید حاوی برخی از کد های خاص JavaScript برای حل این مشکل باشد ، و هر دو امکان تبادل داده را دارند. این آموزش در مورد این قسمت از دانش مربوطه صحبت خواهد کرد.
این محدودیت همچنین برای امنیت اطلاعات کاربر است. به عنوان مثال ، صفحه وب http://anysite.com که توسط کاربر باز شده است نباید بتواند به http://gmail.com (صفحه وب باز شده در برگه دیگر) دسترسی داشته باشد و نه اطلاعات را از آن سرقت کند.
جاوا اسکریپت می تواند به راحتی از طریق اینترنت با سروری که صفحه فعلی در آن قرار دارد ارتباط برقرار کند. اما توانایی دریافت داده از سرورهای سایر وب سایت ها / دامنه ها مختل شده است. اگرچه می تواند ، اما به یک پروتکل صریح (در هدر HTTP) از سرور راه دور نیاز دارد. این نیز برای امنیت اطلاعات کاربر است.
اگر جاوا اسکریپت در خارج از محیط مرورگر (مثلاً در سرور) استفاده شود ، چنین محدودیتی وجود ندارد. مرورگرهای مدرن همچنین اجازه نصب پلاگین ها / پسوندهایی را می دهند که ممکن است به مجوزهای طولانی تر نیاز داشته باشند.
به همین دلیل جاوا اسکریپت متفاوت است. به همین دلیل پرکاربردترین ابزار برای ایجاد رابط های مرورگر است.علاوه بر این ، از JavaScript می توان برای ایجاد برنامه های سرور و تلفن همراه و غیره نیز استفاده کرد.زبان "بالا" جاوا اسکریپت افراد مختلف عملکردهای مختلفی می خواهند. نحو جاوا اسکریپت نمی تواند نیازهای همه را برآورده کند.
این طبیعی است ، زیرا پروژه ها و نیازهای همه متفاوت است.
بنابراین ، اخیراً بسیاری از زبانهای جدید ظاهر شده اند و همه این زبانها قبل از اینکه در مرورگر اجرا شوند ، به جاوا اسکریپت کامپایل می شوند (تبدیل می شوند).ابزارهای مدرن ، تلفیق را بسیار سریع و شفاف انجام می دهند و در واقع به توسعه دهندگان این امکان را می دهند که کدی را به زبان دیگری بنویسند و "به طور خودکار" آن را به JavaScript تبدیل کنند.
نمونه هایی از این زبان ها عبارتند از:
CoffeeScript نوعی قند نحوی برای JavaScript است. این یک نحو کوتاه تر است ، و به ما امکان می دهد کدهای واضح و واضحی بنویسیم. به طور کلی ، توسعه دهندگان Ruby آن را دوست دارند.
TypeScript برای ساده سازی توسعه برای پشتیبانی بهتر از توسعه سیستم های پیچیده ، بر افزودن "انواع داده های دقیق" متمرکز است. توسعه یافته توسط مایکروسافت.
Flow انواع داده ها را نیز اضافه می کند ، اما به روشی دیگر. توسعه یافته توسط فیس بوک.
دارت یک زبان مستقل است. این موتور خاص خود را دارد که می تواند در محیطی غیر از مرورگر (مانند برنامه های تلفن همراه) کار کند و همچنین می تواند در JavaScript وارد شود. ساخته شده توسط گوگل.
Brython یک کامپایلر جاوا اسکریپت پایتون است که می تواند بدون استفاده از جاوا اسکریپت برنامه ها را در پایتون خالص بنویسد.
از این قبیل زبانها زیاد است. البته ، حتی اگر از چنین زبان کامپایل شده ای استفاده می کنیم ، باید JavaScript را نیز درک کنیم. زیرا درک جاوا اسکریپت می تواند واقعاً درک کند که چه کار می کنیم.
خلاصه کردن
جاوا اسکریپت در ابتدا زبانی بود که مخصوص مرورگرها طراحی شده بود ، اما اکنون در بسیاری از محیط های دیگر از آن استفاده می شود.امروزه JavaScript به پرکاربردترین زبان مرورگر تبدیل شده است که کاملاً با HTML / CSS ادغام شده است.
بسیاری از زبان های دیگر وجود دارد که می تواند در جاوا اسکریپت "کامپایل" شود ، و این زبان ها همچنین ویژگی های بیشتری را ارائه می دهند. توصیه می شود حداقل پس از تسلط بر جاوا اسکریپت ، از این زبان ها شناخت کافی داشته باشید.
C # یک زبان برنامه نویسی جهانی و شی گرا است که در ابتدا برای سهولت در توسعه برنامه های ویندوز توسعه داده شده است. شباهت های بین C # و خانواده زبان C و همچنین Java برای سهولت شروع به کار توسعه دهندگان با سابقه در زبان های شی گرا در نظر گرفته شده است. علاوه بر این ، ویژگی های مدرن زبان جاوا مانند قابلیت حمل و مدیریت خودکار حافظه (جمع آوری زباله) معرفی شد.
با تشکر از دات نت فریم ورک ، C # دارای یک کتابخانه کلاس گسترده مشابه Java است که به عنوان مثال از رمزگذاری ، برنامه نویسی سوکت TCP / IP و ایجاد رابط های گرافیکی پشتیبانی می کند. مدیریت استثنایی ، انواع مختلف چندشکلی و جداسازی رابط ها و پیاده سازی از دیگر مشخصات C # است.
پلی مورفیسم
برخلاف C ++ ، C # از وراثت چندگانه پشتیبانی نمی کند. با این حال ، یک کلاس می تواند هر تعداد رابط را پیاده سازی کند. این امر همچنین باعث کاهش منابع خطا و ساده سازی نیازهای معماری برای .NET Framework می شود.
اشاره گر
C # همچنین در مورد استفاده صریح از اشاره گرها توصیه می کند. این زبان بین C ++ و Java موقعیت متوسطی را اشغال می کند ، که نشانگرها را فراهم نمی کند. استفاده از آنها می تواند به راحتی حافظه سیستم را در صورت خطاهای برنامه نویسی خراب کرده و منجر به خرابی شود.
در C # می توان از نشانگرها فقط در بلوکی استفاده کرد که صریحاً به عنوان ناامن مشخص شده اند. برنامه هایی با کد ناامن برای اجرای نیاز به مجوزهای مناسب دارند. دسترسی به اشیا معمولاً از طریق ارجاعات شی object ایمن صورت می گیرد ، که یا همیشه به یک جسم "زنده" اشاره می کنند یا دارای مقدار صفر دقیقاً مشخص شده هستند. غیرممکن است که به یک شی non موجود یا یک بلوک تصادفی حافظه مراجعه کنید.
C # یک زبان کاملاً تایپ شده است تا از خطاهای تبدیل نوع جلوگیری کند. محدودیت های آرایه به طور خودکار بررسی می شود. متغیرها باید مقداردهی اولیه شوند. از طریق جمع آوری خودکار زباله ، حافظه ای که دیگر استفاده نمی شود آزاد می شود.
توسعه متقابل با .NET Core و Mono
پلتفرم .NET Core مایکروسافت که در حال حاضر در حال ساخت است ، برنامه های .NET را علاوه بر ویندوز در MacOS و توزیع های مختلف لینوکس نیز قابل استفاده می کند. .NET Core یک پروژه نوسازی منبع باز از اجزای اصلی چارچوب NET است. هدف توسعه برنامه ساده ، مدولار بودن بهتر و استقلال بیشتر پلتفرم است.
Mono به عنوان یک اجرای منبع باز جایگزین از چارچوب دات نت ، امکان توسعه نرم افزار مستقل از پلتفرم را بر اساس زیرساخت زبان مشترک و سی شارپ فراهم می کند. با استفاده از Mono ، برنامه هایی که برای محیط دات نت ساخته شده اند نیز بر روی macOS ، iOS ، Android و Linux اجرا می شوند.در پایان سال 2020 ، NET Framework ، .NET Core و Mono قرار است در یک پلت فرم یکنواخت تحت نام .NET 5.0 ادغام شوند.
C # یک زبان برنامه نویسی مدرن ، شی گرا و بدون نوع است. این برنامه با سیستم عامل های NET ادغام می شود که توسعه متقابل برنامه های ویندوز ، macOS ، iOS ، Android و Linux را امکان پذیر می کند.
شرکت هایی با موضوع
C # به عنوان یک زبان برنامه نویسی .NET گرا ، از نزدیک با راه حل های Microsoft مانند Visual Studio Code تلفیق شده است.به عنوان یک زبان برنامه نویسی بومی برای سیستم عامل های دات نت مایکروسافت در اوایل دهه 2000 توسعه داده شد. سیستم عامل های .NET زبان ها ، ابزارها و فن آوری های برنامه نویسی را برای توسعه و اجرای برنامه های نرم افزاری فراهم می کنند.
با مشخصات زبان مشترک (CLS) ، مایکروسافت طیف وسیعی از زبانها را تعریف می کند که همه زبانهای برنامه نویسی .NET باید با آنها مطابقت داشته باشند. C # با CLS مطابقت دارد. مشخصات حداقل مجموعه ای از انواع و كتابخانه های كلاسی را كه انتظار دارد كامپایلر در دسترس باشد لیست می كند.
کد برنامه نویسی سازگار با CLS از زبان های مختلف می تواند مخلوط شود. توسعه دهندگان می توانند بخشی از برنامه را به زبان سی شارپ و بخشی دیگر را با زبان دیگر .NET (به عنوان مثال .NET ویژوال بیسیک) بنویسند. محیط توسعه ، کتابخانه ها و مدل توسعه شی گرا حفظ شده است.
محیط توسعه ویژوال استودیو
مایکروسافت با ویژوال استودیو یک محیط توسعه یکپارچه (IDE) را فراهم می کند که با آن می توان برنامه های دات نت را به زبانهای CLS توسعه داد. Visual Studio از توسعه برنامه های دسک تاپ ، موبایل و وب در Visual Basic ، C ، C ++ ، C # ، Python ، JavaScript و سایر برنامه ها پشتیبانی می کند.
چارچوب خالص
برنامه های NET بر اساس رابط های برنامه نویسی چارچوب NET ساخته شده اند. این چارچوب کتابخانه های کلاس ، کامپایلر و محیط زمان اجرا را برای اجرای برنامه های .NET فراهم می کند.
کد منبع نوشته شده به یک کد متوسط ، زبان مشترک میانی (CIL) ترجمه می شود. هر سیستم عاملی که از .NET پشتیبانی می کند دارای محیط اجرا .NET مخصوص به خود است که به آن زبان مشترک (Runtime) می گویند. CLR حافظه را مدیریت می کند ، منابع مربوطه را پردازش می کند و تدوین به موقع کد (CIT) کد CIL را انجام می دهد.
بنابراین CLR یک ماشین مجازی است ، یعنی سیستمی که برنامه هایی را روی سیستم عامل اجرا می کند که بومی بر روی آن اجرا نمی شود. CLR تضمین می کند که کد مشابه می تواند در سیستم عامل های مختلف اجرا شود.
CLR همچنین باعث امنیت بیشتر برنامه های C # نسبت به برنامه هایی می شود که مجبور هستند خود حافظه را مدیریت کنند. بنابراین از کد مبتنی بر NET به عنوان کد مدیریت شده یاد می شود.
بیایید نگاهی به مطالب این زمینه بیندازیم. اگر عبارت if شرایط را برآورده نکند ، می توانم فرایند تشخیص را گزارش دهم. من می توانم گره های مربوط به درخت نحو فعلی را بدست آورم ، معمولاً محتوای این عبارت if است. بیایید پردازش را شروع کنیم ، ما این موضوع را نشان می دهیم ، از آنجا که در حالت اشکال زدایی هستیم ، می توانیم یک شی inc واقعی را در اینجا ببینیم. می توانیم ببینیم که این واقعاً یک عبارت if است. بیایید از مدل شی ساخته شده توسط Roslyn استفاده کنیم و آن را به مدل if دستور تبدیل کنیم.
در اینجا می توانم یک گره درخت نحوی بدست آورم که اتفاقاً یک کلاس مشتق شده از IfStatementSyntax است. می توانیم var ifStatement را به این مقدار اعلام کنیم. اکنون این تنها شیئی است که از این به بعد باید با آن تماس بگیریم و من دیگر دستور if را بررسی نمی کنم. اگر محتوای این عبارت مخدوش نباشد ، این مورد Block نامیده می شود ، به این معنی که این کد با مشخصات مطابقت ندارد. اگر به SyntaxKind.Block تعلق نداشته باشد ، خطایی را درخواست می کنم. من به کاربر خواهم گفت: "این درست نیست". اکنون باید نتیجه تشخیص را گزارش دهم. اما من هنوز آن را پیاده سازی نکرده ام. لازم است کمی عملیات refactoring انجام دهم تا یک متغیر محلی برای آن تولید کنم.
من می توانم از طریق Diagnostic تشخیص ایجاد کنم. ایجاد کنید ، که نیاز به ارائه برخی پارامترها دارد. ابتدا توصیفی به نام Rule وجود دارد و سپس باید مکان را مشخص کنم. یعنی وقتی مشکلی پیش می آید ، باید خطوط موج دار را در کد نمایش دهم. سپس باید مشخص کنم کدام قانون در حال حاضر نقض شده است. سپس مکانی را که با قوانین مطابقت ندارد مشخص کنید. اجازه دهید این پیاده سازی را برای تولید یک متغیر محلی مجدداً انجام دهیم. این تمام کاری است که من باید در حالت رفع اشکال انجام دهم.
بنابراین به اصطلاح "مکان" چیست؟ این گره ای است که من در حال حاضر روی آن کار می کنم: دستور if. بنابراین کجا باید اطلاعات سریع را قرار دهیم؟ اجازه دهید آن را در این کلمه کلیدی قرار داده است. دستور if در اینجا کلمه کلیدی if دارد ، زیرا این یک درخت نحوی بتونی است. این شامل تمام جزئیات اجرای کد در داخل ، از جمله تمام موقعیت ها است. بگذارید موقعیت مربوطه را از آن دریافت کنیم. در اینجا با روش GetLocation بدست می آید. ما موقعیت کلمه کلیدی if را بدست می آوریم و سپس این موقعیت را به این روش منتقل می کنیم. چند کد نوشتم بیایید این نقطه شکست را برداریم و به کار در خطایاب ادامه دهیم. بیایید کمی منتظر بمانیم و ببینیم چه اتفاقی افتاده است ، خوب ، حالا شما می بینید که در دستور if چنگال ظاهر می شود.
این تمام کاری است که من انجام می دهم: نوشتن سه یا چهار خط کد برای شناسایی مشکل و گفتن چارچوب از کجا مشکل را نشان دهد. برای اینکه به شما اثبات کنم که کار می کند ، من درمورد این کد توضیح دادم ، و خواهید فهمید که خطوط موج دار دیگر از بین رفته اند.
وقتی می خواهید عملیات پیچیده تری را اجرا کنید ، کمی دشوار می شود ، اما این یک مدل زبان نسبتاً ساده است ، زیرا شامل یک نحو کامل و معانی معنایی الزام آور است ، مردم می توانند از آن برای ساختن ابزار استفاده کنند ، سپس با دیگران به اشتراک بگذارند ، به طوری که هر کسی بتواند از ویرایشگر استفاده کند ، می تواند از اصول یکسانی در روند ویرایش C # پیروی کند ، البته به شرط آنکه بر اساس Roslyn باشد. مهم نیست که افراد در کدام پلتفرم قرار دارند ، آنها می توانند از آن بهره های زیادی ببرند.
آنالیز کننده ای که من نوشتم می تواند در حالت دسته ای نیز اجرا شود. این می تواند بخشی از فرآیند تدوین باشد و می تواند هشدارها یا خطاها را مانند آنچه که کامپایلر انجام می دهد پرچم گذاری کند. من همچنین می توانم یک ابزار تعمیر (اما قصد ندارم این ویژگی را در آینده نشان دهم) پیاده سازی کنم ، که می تواند کد را بر اساس قوانینی که وضع می کنیم ترمیم کند.
این نسخه آزمایشی Roslyn در اینجا است که چگونه به افراد کمک می کند تا یک تجربه کدگذاری بهتر ، یک تجربه بهتر توسعه C # را بدست آورند. این یک پایگاه کد بهتر و یک معماری بهتر به ما می دهد. بدیهی است که در C # ، می توانیم آزمایش Dogfood را بر روی آن انجام دهیم تا بهتر به پیشرفت زبان خود کمک کنیم.
بگذارید یک مثال مشخص تر را بیاوریم. به منظور کمک به افراد در تمرکز بر روی زمینه هایی غیر از پیاده سازی زبان ، این چارچوب را ایجاد کردیم ، به نام Analyzer ، که از طریق آن می توان کد منبع افراد را به راحتی تجزیه و تحلیل ، تشخیص داده و در نهایت نتایج خروجی گرفت. به این ترتیب می توانیم پیشنهادهای تصحیح کد را ارائه دهیم.
اگر نیاز داری:
سازمان شما دارای قالب کد است که باید اجرا شود ،انجام refactoring به طور مکرر ، می خواهید کد را با همه به اشتراک بگذارید ،نیاز به اصلاح خودکار کد
سپس این ابزار دقیقاً همان چیزی است که شما به آن نیاز دارید.
می توانید این پروژه را در Visual Studio نصب کنید و سپس می توانید از آن استفاده کنید. وقتی پروژه ای را باز می کنید ، از قبل با کد دیگ بخار ساخته شده برای پروژه همراه است. به طور خاص ، هنگامی که پروژه شما به این شکل وارد حالت اشکال زدایی می شود ، تحلیلگر کد شما را استخراج می کند ، اصلاحات کد را انجام می دهد ، و در نهایت نتایج را بیرون می آورد. تجزیه و تحلیل می تواند به عنوان یک کد دسته ای اجرا شود ، یا می تواند به صورت یک بسته Nougat توزیع شود. به عنوان پسوند Visual Studio ظاهر می شود و در نسخه کامل Visual Studio ، به عنوان بخشی از حالت اشکال زدایی اجرا می شود. اکنون ویژوال استودیو را اجرا کردم و سپس شروع به انجام اصلاحات کد کرد. این عملیاتی است که من در نسخه کامل Visual Studio نوشتم.
حالا بیایید چند کد را در این نسخه کامل از Visual Studio باز کنیم. من عملکرد این تجزیه و تحلیل ها را به طور کامل اجرا نکرده ام. در اینجا برخی از کد نمونه هایی که می خواهیم کار کنیم وجود دارد. برای سادگی ، چیزی که می خواهم به آن دست پیدا کنم تحلیل دستوری است ، جایی که می توانم قوانین معنایی مختلفی را تعریف کنم. موتور Roslyn اطلاعات کاملی را برای استفاده من فراهم می کند. من می توانم یک کد کد غیرقانونی را بدون فر کردن در عبارت if یا else تعریف کنم.
ما باید آن سبک کد جامد به سبک قدیمی را پیاده سازی کنیم ، یعنی همیشه باید دستورات curry را اضافه کنیم ، زیرا هنگام ویرایش کد بعدی ، اشکالات زیادی نخواهیم داشت. ما باید در بعضی موارد از بروز این نوع کد جلوگیری کنیم. برای ملاحظات زمانی ، من فقط در صورت اجرا در اینجا پیاده سازی می کنم. البته ، ما می توانیم آن را در قوانین دیگر نیز اعمال کنیم. در اینجا اجازه دهید یک تحلیلگر کد کوچک را اجرا کنیم.
من در اینجا استفاده از این نسخه کامل را متوقف نخواهم کرد. من نیاز به ایجاد یک نقطه شکست دارم. هر زمان که دستور if را می بینیم ، اولین کاری که باید انجام دهیم ثبت آن است و باید این روش را AnalyzeNode بنامیم. هر زمان که تحلیلگر کد منبع در Visual Studio با دستور if برخورد کند ، به طور خودکار در اینجا قرار می گیرد و سپس می توانم برخی عملیات را انجام دهم ، و سپس آن را به تجزیه و تحلیل کد ادامه می دهد تا زمانی که نقطه شکست بعدی وارد شود. اکنون که می توانم تمام اطلاعات موجود در این کد را بدست آورم ، می توانم عملیات بعدی را اضافه کنم. آنچه من می گیرم یک شی context زمینه ای است.
قبل از اجرای آن ، یک برنامه کامل در C ++ باید "ساخته شود" ، یعنی توسط برنامه ای به نام کامپایلر به دستورالعمل های بومی ماشین هدف ترجمه شده و توسط برنامه ای به نام linker با کتابخانه های خارجی از قبل کامپایل شده پیوند داده شود. کامپایلرهای با کیفیت بالا بهینه سازی گسترده کد محلی و جهانی را انجام می دهند و کدهایی بسیار کارآمد و جمع و جور تولید می کنند. برنامه های کامپایل شده برای اجرای در برنامه های کامپیوتری نیازی به محیط های اضافی برای زمان اجرا ندارند. این را با زبانهای تفسیر شده ، مانند پایتون ، یا زبانهایی که معمولاً به عنوان کد واسطه مستقل از سیستم عامل ، مانند جاوا ، وارد و به کاربران تحویل می شوند مقایسه کنید. کد پایتون برای اجرا به یک مفسر پایتون نیاز دارد و برنامه هایی که در کد بایت جاوا جاوا قرار می گیرند برای ترجمه کد میانی به دستورالعمل های ماشین میزبان در زمان اجرا به یک محیط زمان اجرا جاوا نیاز دارند. کامپایل کردن یک برنامه بزرگ C ++ می تواند زمان قابل توجهی طول بکشد ، زیرا هر خط از کد منبع آن باید توسط کامپایلر پردازش شود ، بدون توجه به اینکه آیا در طول فراخوانی برنامه واقعاً اجرا می شود یا خیر. این چرخه توسعه را کند می کند ، اما به طور معمول کد قابل اطمینان تری را به دنبال دارد ، زیرا کامپایلر می تواند در زمان کامپایل خطاهای زیادی را بدست آورد ، بنابراین از تعجب "خطای زمان اجرا" ناخوشایند برای زبانهای تفسیر شده مانند پایتون جلوگیری می کند. نکته منفی دیگر زبان کامپایلر این است که فایلهای اجرایی تولید شده توسط یک کامپایلر از کد منبع قابل حمل نیستند و فقط روی سیستم عامل مورد نظر (یعنی سخت افزار به علاوه سیستم عامل) که برای آن کامپایل شده اند اجرا می شوند یا باینری سیستم عامل سازگار هنگام نوشتن کد C ++ ، تعیین گزینه های کامپایلر و انتخاب کتابخانه های کد برای ایجاد ارتباط با نیازهای خاص سازگاری باینری ، باید توجه ویژه ای داشته باشید (برای مثال ، به مقاله Wikipedia در مورد سازگاری دودویی [19] و Red Hat Enterprise Linux 7: سازگاری برنامه مراجعه کنید) فقط راهنمای [20] باشید تا ایده ای در مورد مسئله سازگاری باینری پیچیده بدست آورید). برای اینکه برنامه یا کتابخانه C ++ را به یک سیستم عامل دیگر منتقل کنید ، کد منبع باید به طور خاص برای آن سیستم عامل دوباره جمع آوری شود. از آنجا که امروزه کامپایلرهای C ++ برای همه سیستم عاملهای بزرگ رایانه ای و سیستم عامل ها وجود دارد ، به طور کلی ، کد منبع C ++ بسیار قابل حمل است. با این حال ، برنامه های پیچیده ای که با استفاده از C ++ با استفاده از ویژگی های زبانی غیر استاندارد یا ضعیف پشتیبانی می شوند یا وابستگی به کتابخانه های کدی دارند که به طور گسترده ای منتقل نشده اند ، یا با تکیه بر ویژگی های خاص دستگاه یا سیستم عامل ، مانند مثال اندازه ماشین کلمه ، بایت سفارش ، یا پشتیبانی از دستورالعمل های خاص CPU ، حمل و نقل بسیار دشوار است و ممکن است نیاز به ایجاد تغییراتی در سطح کد توسط یک برنامه نویس با تجربه C ++ داشته باشد. یک ابزار آنلاین بسیار مفید به نام Compiler Explorer [21] وجود دارد که می تواند تکه های برنامه ها را در بسیاری از زبان های برنامه نویسی از جمله C ++ با کامپایلرها و گزینه های مختلف به صورت تعاملی گردآوری کرده و خروجی کد ماشین را تجسم کند. این باعث می شود که این یک ابزار آموزشی عالی باشد که می تواند از بهینه سازی کد سطح پایین نیز استفاده شود.
لازم به ذکر است که استاندارد زبان C ++ تجویز نمی کند که برنامه ای در C ++ ابتدا باید قبل از اجرا به طور کامل در یک فایل اجرایی حاوی دستورالعمل های ماشین پلت فرم هدف گردآوری شود. مترجم های C ++ که اجازه اجرای کد C ++ را در حالت تفسیر شده و / یا حالت تعاملی به صورت خط به خط را می دهند (به عنوان مثال Cling [22]) وجود دارد ، اما ماهیت زبان ، به ویژه تایپ ایستا ، وجود دارد به خوبی با حالت اجرای تعاملی حلقه خواندن-ارزیابی-چاپ-حلقه (REFL) بازی نمی کند ، بنابراین مفسران C ++ ابزارهای تخصصی بسیار خوبی برای نمونه سازی سریع و توسعه کامپایلر هستند.
C ++ ضروری است
برنامه ریزی ضروری یک الگوی برنامه نویسی است که در آن یک برنامه شامل عباراتی (یا دستورات به کامپیوتر) است که وضعیت برنامه را تغییر می دهد. برنامه نویسی ضروری بر توصیف نحوه کار یک برنامه متمرکز است و کد اجباری نقشه کد ماشین را بومی کامپیوتر می زند. در سطح پایین ، حالت برنامه با محتویات حافظه تعریف می شود و دستورالعمل های موجود در زبان ماشین بومی رایانه ، سخت افزار نحوه تغییر داده در حافظه را تجویز می کند. زبانهای ضروری سطح بالاتر دستورالعملهای خاص پلت فرم را از بین می برند ، به عنوان مثال ، از متغیرها به جای مکان های حافظه و عبارات نوشته شده در علامت های قابل خواندن توسط انسان به جای کدهای دستورالعمل استفاده می کنند ، اما هنوز از همان الگو پیروی می کنند.
سی پلا س پلاس از برنامه نویسی ساخت یافته پشتیبانی می کند
زبان های برنامه نویسی ساخت یافته مکانیسم های بصری برای کنترل جریان برنامه (به ترتیب ترتیب اجرای دستورات) فراهم می کنند. عبارات کنترل جریان ساخت یافته در C ++ مشابه آنچه در بسیاری از زبانهای برنامه نویسی ساختار یافته دیگر یافت می شود. اینها اگر / دیگری برای پیاده سازی منطق انشعابی ، و برای ، while ، و do / while برای اجرای تکرارها (حلقه ها) هستند. C ++ دستور معروف goto را دارد که می تواند برای انتقال کنترل به یک مکان دلخواه درون یک تابع به روشی "غیر ساختاری" مورد استفاده قرار گیرد ، اما به ندرت استفاده می شود.
سی پلاس پلاس دامنه متغیر واژگانی دارد
C ++ به عنوان بیشتر زبانهای مدرن ، از دامنه واژگانی برای متغیرها و توابع استفاده می کند. یک متغیر یا عملکرد در ++ C ممکن است فقط از داخل کد کدی که در آن اعلام شده است ، ارجاع شود. دامنه هنگام کامپایل کد تعیین می شود. برعکس دامنه واژگانی ، دامنه پویا به دامنه یک متغیر تعریف شده در زمان اجرا و بسته به حالت برنامه در هنگام مواجهه با نام یک متغیر اشاره دارد.
سی پلاس پلاس بصورت ثابت تایپ می شود ، اما از نظر نوع ایمن نیست
کامپایلر هنگام تدوین برنامه C ++ نوع بررسی را انجام می دهد. این به تشخیص اشتباهات رایج برنامه نویسی کمک می کند. در زبانهای تایپ شده به صورت پویا (مثلاً Python یا JavaScript) انواع متغیرها و توابع در زمان اجرا بررسی می شوند ، که امکان انعطاف پذیری بیشتر را فراهم می کند و گاهی اوقات کد را کوتاه می کند ، اما اغلب هنگام انجام یک کار یا عملکرد منجر به خطاهای زمان اجرا می شود روی جسمی از نوع نامناسب اعمال می شود. لازم به ذکر است که C ++ یک زبان بی خطر از نظر نوع نیست. کامپایلرهای C ++ بسیاری از عملیات را بر روی متغیرهای تایپ شده امکان پذیر می کنند که ممکن است منجر به رفتار یا خطاهای تعریف نشده شود ، اما معمولاً برنامه نویس باید "از کامپایلر مطلع شود" منظور خود را مثلاً با "ریختن" نشانگر به یک مکان حافظه برای یک مکان خاص نوع این در برنامه نویسی سطح پایین که دسترسی کارآمد به سخت افزار ضروری است بسیار مفید است ، اما از برنامه نویسان انتظار می رود که بدانند چه کاری انجام می دهند ، زیرا اشکال زدایی خطاهای ناشی از تبدیل نوع ناامن بسیار دشوار است و اغلب به سیستم عامل وابسته هستند.
سی پلاس پلاس برای دستکاری سطح پایین حافظه امکاناتی دارد
C ++ عملیاتی را روی اشاره گرها به مکان های حافظه دلخواه فراهم می کند ، که C ++ را به گزینه ای مناسب برای برنامه نویسی سیستم عامل ها ، سیستم های تعبیه شده و درایورهای دستگاه تبدیل می کند. به عنوان مثال ، یک درایور دستگاه ورودی / خروجی جانبی ممکن است حافظه و رجیسترهای دستگاه کنترل شده را با آدرس های خاص رزرو شده نقشه برداری (یا مرتبط) کند [12]. برای کنترل دستگاه ، درایور دستگاه مقادیر دارای معنی خاص را با توجه به مشخصات دستگاه به آن مکانهای حافظه اختصاص داده شده اختصاص می دهد. به عنوان مثال ، عبارت زیر در کد درایور (با فرض اینکه در C یا C ++ پیاده سازی شده باشد) ، بایت را در محل حافظه 40008000 (در نماد هگزادسیمال) بر 1 قرار می دهد.
نوع داده char در C / C ++ کوچکترین واحد آدرس پذیر دستگاه است (یک بایت متشکل از هشت بیت در اکثر رایانه های مدرن). (char *) عملگر cast نوع است که به کامپایلر می گوید 0x40008000 را به عنوان یک نشانگر به یک بایت در محل حافظه 0x40008000 تفسیر کند ، و پیشوند * (کاراکتر ستاره) عملگر ارجاع دهی اشاره گر است که برای دسترسی (خواندن یا نوشتن) استفاده می شود مقدار ذخیره شده در آن مکان.
دستکاری داده ها از طریق اشاره گرهای حافظه در ++ C نه تنها در برنامه نویسی سطح پایین سیستم ، بلکه در اجرای طیف گسترده ای از الگوریتم ها و ساختارهای داده با حداقل سربار ممکن یک عمل بسیار معمول است. ساختارهای داده ای متداول از نوع بردار مانند بردارها ، ماتریس ها و رشته های کاراکتر به طور م inثر در بلوک های حافظه مجاور حاوی داده هایی از یک نوع خاص در C ++ نشان داده می شوند و C ++ نحوی بسیار مختصر را برای عملکردهای این بلوک های حافظه فراهم می کند. به عنوان مثال ، یافتن موقعیت یک شخصیت در یک رشته C خاتمه یافته با صفر با استفاده از عملیات اشاره گر C می تواند فقط با یک خط کد انجام شود.