برچسب ارشیو: مصور

تمرینات مصور SQL

نگاه کوتاه

 از ویکی‌پدیا، دانشنامهٔ آزاد

در مدل رابطه‌ای داده‌ها، زبان ساختارمند پرسش‌ها یا اس‌کیوال یا سی‌کوال (Structured Query Language – SQL) زبانی است سطح بالا مبتنی بر زبان سطح پایین و ریاضی جبر رابطه‌ای که برای ایجاد، تغییر، و بازیابی داده‌ها و نیز عملیات بر روی آنها به‌کار می‌رود.

زبان SQL به سمت مدل شی‌گرا – رابطه‌ای نیز پیشرفت کرده‌است.

تاریخچه

منشا اصلی سی‌کوال به مقالهٔ سال ۱۹۷۰ ادگار کاد تحت عنوان «مدل رابطه‌ای داده‌ها برای بانک‌های بزرگ داده‌های اشتراکی»[۱] باز می‌گردد. در دههٔ ۷۰ گروهی از شرکت آی‌بی‌ام در شهر سان خوزه بر روی سیستم پایگاه داده‌های سیستم آر بدون توجه به این مقاله کار می‌کردند و زبان SEQUEL را به منظور عملیات و بازیابی اطلاعات ذخیره شده در سیستم آر ایجاد کردند. اگر چه اس‌کیوال ناشی از تلاشهای کاد بود اما دونالد چامبرلین و ریموند بویس به عنوان طراحان زبان SEQUEL شناخته می‌شوند

سمینارهایی در زمینه فناوری بانک اطلاعاتی و مباحثاتی در مورد مزایای مدل رابطه‌ای جدید برگزار گردید. تا ۱۹۷۶ مشخص بود که آی‌بی‌ام که طرفدار جدی فناوری بانک اطلاعاتی رابطه‌ای بوده، توجه زیادی نسبت به زبان سی‌کوال دارد. تبلیغات در زمینه سیستم آر باعث جذب گروهی از مهندسین در منلو پارک در کالیفرنیا گردید. این گروه به این نتیجه رسیدند که تحقیقات آی‌بی‌ام منجر به یک بازار تجاری برای بانک‌های اطلاعاتی رابطه‌ای خواهد گردید.

در ۱۹۷۷ این گروه شرکتی بنام اینک (Inc) و رلیشنال سافتویر (Relational Software) تأسیس نمودند تا یک سامانه مدیریت پایگاه‌های داده رابطه‌ای بر اساس سی‌کوال بسازند. محصولی بنام اوراکل در ۱۹۷۹ عرضه گردید، و اولین سامانه مدیریت پایگاه داده رابطه‌ای بوجود آمد. به این ترتیب محصول اوراکل باعث گردید اولین محصول آی‌بی‌ام برای مدت ۲ سال در بازار دچار رکود باشد. این محصول بر روی مینی کامپیوترهای وکس دیجیتال (VAx Digital) اجرا می‌شد که خیلی از کامپیوترهای بزرگ آی‌بی‌ام ارزان‌تر بودند.

امروزه این شرکت با نام اوراکل اولین فروشنده سیستم‌های مدیریت بانک اطلاعاتی رابطه‌ای است. استادان آزمایشگاه‌های کامپیوتر در دانشگاه برکلی کالیفرنیا نیز در نیمه دهه ۱۹۷۰ مشغول تحقیق در زمینه بانک‌های اطلاعاتی رابطه‌ای بودن (مانند تیم تحقیق آی‌بی‌ام)، گروه فوق نیز یک نمونه ازسامانه مدیریت پایگاه داده رابطه‌ای ایجاد نمودند و سیستم خود را اینگرس (Ingres) نام نهادند.

پروژه اینگرس شامل یک زبان پرس‌وجو بنام QUEL بود، اگر چه از سی‌کوال خیلی ساخت یافته تر بود، اما شباهت آن به زبان انگلیسی کمتر بود.

در حالیکه اوراکل و اینگرسبرای ارائه محصولات تجاری در رقابت بودند، پروژه سیستم آر شرکت آی‌بی‌ام در تلاش بوده‌است که یک محصو ل تجاری با نام SQL/Data system (یا SQL/DS) عرضه نماید. آی‌بی‌ام موجودیت SQL/DS را در ۱۹۸۱ اعلام، و در ۱۹۸۲ شروع به عرضه محصول خود نمود. در سال ۱۹۸۳ آی‌بی‌ام یک نسخه SQL/DS را برای VM/CMS (سیستم‌عاملی که در کامپیوتر بزرگ آی‌بی‌ام غالباً استفاده شده بود)، اعلام نمود.

همچنین در سال ۱۹۸۳ شرکت آی‌بی‌ام، محصول دی‌بی‌تو را معرفی نمود که یک سامانه مدیریت پایگاه داده رابطه‌ای برای سیستم‌های بزرگ آن شرکت بود. دی‌بی‌تو تحت سیستم‌عامل وی‌ام‌اس (سیستم‌عامل مراکز کامپیوتری بزرگ) اجرا می‌شد. اولین نسخه دی‌بی‌تو در ۱۹۸۵ عرضه گردید، و مسئولین آی‌بی‌ام اعلام نمودند که این محصول یک برنامه استراتژیک برای تکنولوژی نرم‌افزاری آی‌بی‌ام می‌باشد. از آن تاریخ تاکنون دی‌بی‌تو سامانه مدیریت پایگاه داده رابطه‌ای شاخصی بوده و آی‌بی‌ام از آن حمایت نموده و زبان «سی‌کوال دی‌بی‌تو» استاندارد عملی زبان بانک اطلاعاتی بوده‌است.

استانداردها

سی‌کوال استاندارد (ANSI (American National Standards Institute را در سال ۱۹۸۶ و ISO (International Organization for Standardization) را در سال ۱۹۸۷ اتخاذ نمود. استانداردهای مختلفی از اس‌کیوال تاکنون عرضه شده که در جدول زیر بیان می‌کنیم:

حوزه و وسعت

بسیاری از اصطلاحات زبان اس‌کیوال تحت استاندارد بین‌المللی بوده، و در نتیجه، از آنها شبیه بقیه زبانهای استاندارد مثل محصولات شرکت اوراکل PL/SQL[۲] یا Sybase و SQL PL (مدل رویه‌ای) از شرکت آی‌بی‌ام می‌باشد.

اس‌کیوال برای کارهای ویژه و محدودی (گزارش گیری از داده‌ها در پایگاه داده‌های رابطه‌ای) طراحی شده‌است. بر خلاف زبانهای دستوری مثل بیسیک یا سی که برای حل مسائل طراحی شده، SQL زبانی بر پایه اعلان است. زبانهای توسعه یافته‌ای مثل PL/SQL به دنبال کامل کردن زبان به هدف ایجاد زبان برنامه نویسی با حفظ مزیت‌های SQL می‌باشد. شیوه دیگر کار این است که به کدهای زبان برنامه نویسی اجازه دسترسی به پایگاه داده به کمک دستورات SQL داده شود مثلاً PostgreSQL به توابعش اجازه می‌دهد که درون کدهای Perl، Tcl و C نوشته شوند. گاهی به شوخی گفته می‌شود که SQL نه ساخت یافته‌است، نه محدود به گزارش گیری‌ها و اصلاً یک زبان نیست!

واژه‌های کلیدی

واژه‌های کلیدی اس‌کیوال به گروه‌های مختلفی تقسیم می‌گردد، در زیر به برخی از آنها اشاره می‌کنیم آنهایی که آشنا تر هستند را تنها با یک مثال شرح می‌دهیم:

  • دستور بازیابی داده‌ها: SELECT
  • دستورات عملیات داده‌ها: INSERT،UPDATE،MERGE،TRUNCAT، DELETE
  • دستورات تراکنش داده‌ها: COMMIT و ROLLBACK
  • دستورات تعریف داده‌ها: CREATE وDROP
  • دستورات کنترل داده‌ها: GRANT و REVOKE

معایب اس کیوال

در کاربرد عملی از SQL معایب زیر بر آن وارد است:

  • دستورات نحوی(syntax) آن تا حدی مشکل است به نحوی که گاهی آنرا با COBOL مقایسه می‌کنند.
  • شیوه استانداردی را برای دستورات چند تکه بزرگ ندارد.
  • نمونه‌های مختلف آن‌ها که توسط فروشندگان مختلف ارائه می‌شود گاهی با هم سازگاری ندارد.
  • وجود برخی دستورات بلند
  • اشتباه گرفتن وظیفه‌های دستورهایی مثل UPDATE و INSERT.

محاسن اس‌کیوال

ولی سی‌کوال دارای محاسنی هم هست:

  • سازگاری با اکثر زبانهای دستوری
  • سازگاری با اکثر پایگاه‌های داده مثل SQL Server,Oracle و حتی MS ACCESS
  • پس از اینکه برنامه نویس این زبان را درک کرد استفاده از آن بسیار ساده‌است
  • کاربرد در زبانهای جدید و پیشرفته

زبان‌های مشابه اس‌کیوال

  • IBM BS۱۲ (Business System ۱۲)
  • Tutorial D
  • TQL Proposal
  • HQL (بر پایه ابزار JAVA
  • OSQL(برپایه ابزارهای شی گرای PHP برای عملیات و گزارش گیری)
  • Quel (در سال ۱۹۷۴ در دانشگاه برکلی ایجاد شد)
  • ODMG (Object Data Management Group)
  • linQ

مفاهیم و تمرینات مصور شی گرایی

نگاه کوتاه

از ویکی‌پدیا، دانشنامهٔ آزاد

برنامه‌نویسی شیءگرا

(به انگلیسی Object-Oriented Programming مخفف:OOP) یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی اجزای آن، شی‌ها می‌باشند. در واقع در این شیوه برنامه نویسی، برنامه به شیء گرایش پیدا می‌کند. به این معنا که داده‌ها و توابعی که قرار است بر روی این داده‌ها عمل کنند، تا حد امکان در قالبی به نام شی در کنار یکدیگر قرار گرفته، جمع‌بندی شده و یک واحد (شی) را تشکیل داده و نسبت به محیط بیرونِ خود، کپسوله می‌شوند و از این طریق، توابع بیگانهٔ خارج از آن شی، دیگر امکان ایجاد تغییر در داده‌های درون آن شی را ندارند. به طور مثال حساب بانکی شما که شامل مشخصات فردی شما و میزان سپردهٔ شما در بانک است، تشکیل یک شی را می‌دهند و به دلیل دارا بودن ویژگی کپسوله، امکان دستکاری در میزان سپرده یا مشخصات شما، توسط دیگران وجود ندارد.[۱] از دیگر ویژگی‌های برنامه نویسی شی گرا، پیچیدگی کم، هزینه کم، امکان گسترش سریع برنامه با خطای کمتر نسبت به سایر پارادایم‌های برنامه نویسی است.

فلسفه یی که منجر به شکل گیری ی زبان‌های شی گرا شد، عبارت بود از این واقعیت که نحوهٔ عملکرد مغز و شیوهٔ دریافت اطلاعات از محیط پیرامون و پردازش آن اطلاعات (اندیشیدن)، شیوه یی شی گراست، از همین روی می‌بایستی زبانی تعریف می‌شد که همین شیوه را مبنای کار خود قرار داده و بازتولید می‌کرد؛ و دقیقاً به همان شکل که اشیا در جهان خارج، دارای هویت و کارکرد مشخص و یگانه برای خود هستند و در عین حال با دیگر اشیا در ارتباطی تنگاتنگ و مستقیم اند، در زبان‌های برنامه نویسی نیز می‌بایستی این اصول کلی برقرار می‌شد.[۲] تا به این شکل، برنامه نویس بتواند با بهره‌گیری از زبانی که به روش اندیشیدنش، نزدیکی بیشتری دارد، شی‌های مختلفی را تعریف نموده، این شی‌ها را در ارتباط با یکدیگر قرار داده و از شی‌های پویای تولید شده برای حل مساله ی پیش روی استفاده نماید. امروزه اکثر زبان‌های دستوری برنامه نویسی از فنون شیءگرایی پشتیبانی می‌کنند. زبانهایی مانند جاوا، سی++، سی شارپ، دلفی از جمله زبانهای شیءگرا هستند. حتی بسیاری از زبانهای روال گونه که ساختار برنامه‌ها در آنها بلوک‌هایی با نام پروسیجر است امروزه از فنون شیءگرایی نیز پشتبانی می‌کنند. زبانهای سی++ و پی‌اچ‌پی از این جمله هستند. هر شیء یک سری خصوصیت و قابلیت دارد، که اصطلاحاً Properties و Operation خوانده می‌شوند. در این پارادایم برنامه نویسی، دید برنامه نویس به سیستم دید شخصی است که سعی می‌نماید با پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آنها سیستم را تولید نماید. (مفهوم مدیریت دیداری)

کلاس

کلاس نوع خاصی از آرایه است که امکان ذخیره و جمع‌بندی تعداد زیادی المان را (که شامل داده‌ها و توابع هستند) برای یک شی جدید فراهم آورده و تحت یک نام مشترک ذخیره می‌کند. اما بر خلاف آرایه که تنها قادر به ذخیرهٔ داده‌هایی هم جنس است، کلاس می‌تواند داده‌هایی از جنس‌های مختلف را ذخیره نماید.[۳] به طور مثال در نظر بگیرید که می‌خواهیم تاریخ ۱۳ نوامبر ۲۰۰۶ را که تشکیل شده از روز، ماه و سال است مورد استفاده قرار دهیم. برای این منظور سه نوع متغیر متفاوت مورد نیاز است:

وراثت

مقالهٔ اصلی: وراثت (برنامه‌نویسی شی‌گرا)

وراثت یا ارث بری (Inheritance) از مفاهیم اساسی برنامه نویسی شیءگراست. هر شیء یک نمونه از یک کلاس است و هر کلاس می‌تواند از کلاس یا کلاسهای دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاس‌های دیگر را به ارث ببرد). در یک مثال ساده می‌توان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، فرمان، بدنه، در و غیره، می‌توان یک کلاس پایه از اتومبیل ایجاد کرد سپس مثلاً برای اتومبیل سیتروئن مدل C۵ یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. این ویژگی باعث صرفه‌جویی در نوشتن کد و تا حدودی تضمین صحت کد موجود می‌شود. به عنوان مثال اگر کلاس پایه مشکلی داشته باشد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاس‌هایی که از این کلاس پایه ویژگی‌ای ا به ارث برده‌اند این تغییر اعمال خواهد شد.

مخفی‌سازی

مقالهٔ اصلی: کپسوله سازی (علم رایانه)

کپسوله سازی، مخفی‌سازی (Encapsulation)، یا لفافه‌بندی، به این مفهوم اشاره دارد که باید بعضی خصوصیات یا رفتارهای شیء را از دید دیگران پنهان کرد. فرض کنید شما به عنوان یک راننده می‌خواهید اتومبیل شخصی تان را روشن کنید و به محل کارتان عزیمت کنید سوییچ را بر می‌دارید، استارت می‌زنید و با فشار آوردن به پدال‌های گاز و ترمز و چرخش فرمان و … به محل کارتان خواهید رسید. در طول این مسیر در اتومبیل شما به عنوان یک شیء اعمال مختلفی در حال انجام بود. مثلاً لنت ترمز به دیسک چرخ برخورد می‌کرد و باعث کم شدن سرعت می‌شد یا شمع‌ها شروع به جرقه زدن در زمانی بخصوصی می‌کردند. حال فرض کنید که عمل مخفی سازی وجود نداشت و شما مجبور بودید که جرقه زدن شمعها را کنترل می‌کردید و به سیستم سوخت رسانی در موقع لزوم دستور می‌دادید که سوخت را بداخل سیلندرها ارسال کند و… یا هیچ‌گاه به مقصد نمی‌رسیدید! یا سالم نمی‌رسیدید!

عمل مخفی سازی باعث می‌شود که اشیاء بدون آنکه از چگونگی کارکرد یکدیگر اطلاع داشته باشند با هم کار کنند.

چندشکلی

مقالهٔ اصلی: چندشکلی (علوم رایانه)

چند ریختی(Polymorphism) چند ریختی، کمیتی است که به یک رابط امکان می‌دهد تا از عملیات یکسانی در قالب یک کلاس عمومی استفاده کند. عمل خاص کلاس را ذات حقیقی شیء تعیین می‌کند. مثال ساده‌ای از چند ریختی، فرمان اتومبیل است. عمل فرمان اتومبیل برای تمام اتومبیل‌ها بدون توجه به ساز و کاری که دارند، یکسان است. فرمان برای اتومبیل که به طور مکانیکی کار می‌کند یا با نیروی برق یا هر چیز دیگری، عمل یکسانی را انجام می‌دهد؛ بنابراین، پس از اینکه شما عملکرد فرمان را یاد گرفتید، می‌توانید فرمان هر اتومبیلی را کنترل کنید. همین هدف در برنامه نویسی نیز اعمال می‌شود. به طور کلی، مفهوم چند ریختی، اغلب با عبارت ((یک رابط، چندین روش))بیان می‌شود. این بدین معنی است که امکان طراحی رابط عمومی برای گروهی از عملیات مرتبط وجود دارد. چند ریختی یا چندشکلی (Polymorphism) به این معنا است که اشیاء می‌توانند در موقعیت‌های مختلف، رفتارهای متفاوتی بروز دهند. مثلاً یک تابع در صورتی که بر روی نمونه‌ای از کلاس آ فراخوانی شود، رفتار ب را بروز دهد در حالی که اگر بر روی کلاس ج (که فرزند کلاس آ است) فراخوانی شود، رفتاری متفاوت انجام دهد.

انتزاع / تجرید

مقالهٔ اصلی: تجرید (رایانه)

به این معنا است که بخشی از یک موجودیّت یک مفهوم را که میان همهٔ وارثان مشترک است، پیش تعریف کنیم. این توانایی منجر به داشتن نگاه مشابه به موجودیّت‌های مشابه می‌گردد.

یک مثال کاربردی

در اطراف ما اشیاء زیادی وجود دارد و می‌توان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. مثلاً یک ماشین باربری. این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشیاء در آن و… این ماشین در صورتی که ما پدال گاز آن را فشار دهیم، حرکت می‌کند. در صورتی که فرمان آن را بچرخانیم تغییر مسیر می‌دهد. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان می‌دهد؛ ولی فقط این یک ماشین نیست که این کار را انجام می‌دهد. تمامی ماشین‌ها این کارها را انجام می‌دهند. پس می‌توانیم این ماشین را ‘تعریف’ کنیم و بگوییم:

ماشین باربری وسیله‌ای است که چهار چرخ، یک گاز، یک ترمز، یک فرمان و یک محل برای حمل بار دارد و اگر پدال گاز آن فشار داده شود حرکت می‌کند. این تعریف این ماشین است ولی خود آن نیست. هر زمانی چنین ماشینی بخواهیم به کارخانه تولید آن می‌رویم و از فروشندگان می‌خواهیم تا با توجه به این تعریف یک ماشین به ما بدهند.

مفاهیم فوق در زبان‌های برنامه نویسی شیءگرا گنجانده شده‌اند. در این زبان‌ها، اشیاء زیادی از پیش وجود دارند که برنامه‌نویسان می‌توانند از آنها استفاده کنند.

ارتباط اشیاء

مجدداً به مثال ماشین باربری بر می‌گردیم و این بار، یک ماشین سواری را تعریف می‌کنیم. ماشین سواری شیئی است که چهار چرخ، یک ترمز، یک پدال گاز و یک صندوق عقب دارد. این تعریف به تعریف ماشین باربری بسیار شبیه‌است. به عبارت دیگر ما به یک تعریف جدید می‌رسیم: خودرو. خودرو وسیله‌ای است که چهار چرخ، یک ترمز، یک پدال گاز دارد. پس از این به بعد تعریف ماشین باربری و ماشین سواری خیلی ساده‌تر می‌شود.

ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری خودروییاست که صندوق عقب داشته باشد.

  • اگر کسی به درب کارخانه مراجعه کند و بگوید که ‘خودرو’ می‌خواهد، چیزی دریافت نمی‌کند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد پس مشتری تنها می‌تواتند ماشین باربری یا ماشین سواری بخواهد.
  • کارواش را در نظر می‌گیریم. این کارواش خودرو را تمیز می‌کند و دیگر به طور جزئی عنوان نمی‌کند که کدام نوع خودرو را تمیز می‌کند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
  • وقتی شخصی قصد اجاره خودرویی دارد، و می‌خواهد جنسی را حمل کند در هنگام تماس با متصدی کرایه ماشین می‌گوید: «اگر خودرو شمااز نوع باربری است، برای من ارسال کنید»، ولی اگر قصد جابجا شدن را دارد می‌گوید: «برای من یک ماشین سواری بفرستید.»

در زبان‌های برنامه نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشیا از یکدیگر ارث بری می‌کنند. برخی از تعاریف کاملاً عام است و نمی‌توان از آنها نمونه شیئی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته می‌شود.

مدیریت پیچیدگی

مقالهٔ اصلی: مدیریت پیچیدگی

اعمال شیوه‌های مدیریتی با محوریت اشیاء در مطالعه، طراحی، ایجاد، و اجراء پروژه‌های مهندسی نرم‌افزار و مهندسی دانش.

تمرینهای تصویری JavaScript

نگاه کوتاه

از ویکی‌پدیا، دانشنامهٔ آزاد

تاریخچه محتویاتجاوااسکریپت (به انگلیسی: JavaScript) زبان برنامه‌نویسی اسکریپت مبتنی بر اشیاء است که توسط NetScape تولید شده‌است. این زبان، یک زبان شی‌گرا[۱] است که بر اساس استاندارد ECMA-262 Edition 3 نوشته شده‌است.
علیرغم اشتباه عمومی، زبان جاوااسکریت با زبان جاوا ارتباطی ندارد، اگر چه ساختار این زبان به سی پلاس پلاس(++C) و جاوا شباهت دارد؛ که این امر برای یادگیری آسان در نظر گرفته شده‌است. از همینرو دستورهای متداول مانند if, for,try..catch ,”while” و… در این زبان هم یافت می‌گردند.
این زبان می‌تواند هم به صورت ساخت یافته و هم به صورت شی گرا مورد استفاده قرار گیرد. در این زبان اشیاء با اضافه شدن متدها و خصوصیات پویا به اشیاء خالی ساخته می‌شوند، بر خلاف جاوا. بعد از ساخته شدن یک شی به روش فوق، این شی می‌تواند به عنوان نمونه‌ای برای ساخته شدن اشیاء مشابه مورد استفاده قرار گیرد.
به علت این قابلیت زبان جاوااسکریپت برای ساختن نمونه از سیستم مناسب می‌باشد.
کاربرد گسترده این زبان در سایتها و صفحات اینترنتی می‌باشد و به کمک این زبان می‌توان به اشیاء داخل صفحات HTML دسترسی پیدا کرد و آنها را تغییر داد. به همین علت برای پویا نمایی در سمت کاربر، از این زبان استفاده می‌شود.
JavaScript به صورت «جاواسکریپت» خوانده می‌شود، ولی در فارسی به صورت «جاوااسکریپت» ترجمه می‌شود و اگر به صورت «جاوا اسکریپت» ترجمه شود اشتباه است چون دو کلمه جدا از هم نیست و اگر به صورت دو کلمه جدا نوشته شود خطلاهای نگارشی ایجاد می‌شود، به طور مثال ممکن است کلمه جاوا در انتهای خط و کلمه اسکریپت در ابتدای خط بعدی نوشته شود.

جاوااسکریپت را در ابتدا شخصی به نام برندان ایچ در شرکت نت‌اسکیپ با نام Mocha طراحی نمود. این نام بعداً به LiveScript و نهایتاً به جاوااسکریپت تغییر یافت.[۲] این تغییر نام تقریباً با افزوده شدن پشتیبانی از جاوا در مرورگر وب Netscape Navigator همزمانی دارد. اولین نسخهٔ جاوااسکریپت در نسخه ۲٫۰B3 این مرورگر در دسامبر ۱۹۹۵ معرفی و عرضه شد. این نام گذاری منجر به سردرگمی‌های زیادی شده و این ابهام را ایجاد می‌کند که جاوااسکریپت با جاوا مرتبط است در حالی که این طور نیست. عدهٔ زیادی این کار را یک ترفند تجاری برای به دست آوردن بخشی از بازار جاوا که در آن موقع زبان جدید مطرح برای برنامه‌نویسی تحت وب بود می‌دانند.[۳][۴]

به دلیل موفقیت عمدهٔ جاوااسکریپت در نقش زبان نویسه‌ای سمت کاربر (client side scripting language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را جی اسکریپت نامید. این زبان در نسخه ۳٫۰ از مرورگر اینترنت اکسپلورر و در اوت ۱۹۹۶ داده شد. تفاوت‌های این دو زبان به حدی جزیی است که اغلب جی اسکریپت و جاوااسکریپت به جای هم به کار می‌روند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت جی اسکریپت با استاندارد ECMA مطرح می‌کند.

نت‌اسکیپ جاوااسکریپت را به سازمان Ecma International برای استاندارد سازی ارسال کرده‌است و نتیجه نسخهٔ استاندارد شده‌ای به نام ECMA Script است.[۵]

جاوااسکریپت به یکی از زبان‌های برنامه‌نویسی پر طرفدار در وب تبدیل شده‌است. هر چند ابتدا بسیاری از برنامه نویسان حرفه‌ای زبان را کم ارزش تلقی می‌کردند چون مخاطبین آن نویسندگان صفحات وب و آماتورهای این چنینی بودند.[۶] ظهور ای‌جکس بار دیگر جاوااسکریپت را در معرض توجه قرار داد و برنامه نویسان حرفه‌ای بیشتری را به خود جذب نمود. نتیجه ازدیاد فریمورک و کتابخانه‌های جامعی در این زمینه، بهبود شیوه‌های رایج برنامه‌نویسی در جاوااسکریپت و افزایش کاربرد جاوااسکریپت خارج از وب است.[نیازمند منبع]

امکانات زبانی

امکانات زیر (در صورت قید نشدن) همگی مطابق استاندارد ECMA Script می‌باشند.

فریم ورک های مبتنی برجاوا اسکریپت

فریم ورک های زیادی برای این زبان درست شده است مانند جی کوئری و آنگولار جی اس

زبان امری و ساخت یافته

جاوااسکریپت از تمامی نحو ساختاری زبان C پشتیبانی می‌کند. مانند گزاره (if و switch و حلقه‌های while و…) یک مورد استثناء تعیین حوزهٔ متغیرهاست: تعریف حوزه در حد block در جاوااسکریپت وجود ندارد. هر چند جاوااسکریپت ۱٫۷ با کلمهٔ کلیدی let این نوع حوزه دهی را امکان‌پذیر می‌سازد. مانند c در جاوااسکریپت بین عبارت و گزاره تفاوت وجود دارد.

پویایی

؛ تایپ دهی پویا: مانند اکثر زبان‌های نویسه‌ای تایپ به مقدارها منسوب می‌گردد و نه به متغیرها. برای مثال متغیر x ممکن است به یک عدد وابسته سازی شود، و بعداً به یک رشته. جاوااسکریپت برای تعیین تایپ شی راه‌های مختلفی از جمله تایپ دهی اردکی (duck typing) را دارد.[۷]

؛ تایپ دهی ضعیف: زبان جاوااسکریپت از نظر تایپ دهی ضعیف به شمار می‌آید و در آن نتیجهٔ عملیاتی مانند ۵ + “۳۷”، عبارت “۵۳۷” خواهد بود. (عدد را با رشته جمع کرده‌است)

؛ اشیاء به دید آرایه‌های انتسابی: جاوااسکیرپت تقریباً تماماً بر اساس اشیاء است. اشیاء، آرایه‌های انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیاء، کلیدهای آرایه انتسابی هستند و درواقع obj.x = ۱۰ با obj[“x”] = ۱۰ هم ارز هستند و شیوه نگارش با نقطه صرفاً یک سهولت نحوی است. ویژگی‌ها و مقدارهایشان در زمان اجرا قابلیت تغییر اضافه و حذف دارند. همچنین می‌توان روی ویژگیهای یک شی با ساختار for … in پیمایش کرد.

؛ ارزیابی در زمان اجرا: جاوااسکریپت یک تابع eval دارد که قادر است گزاره‌های تولید شده در یک رشته در زمان اجرا را، اجرا کند.

تابعی بودن

؛ تابعی بودن: توابع موجوداتی «درجه اول» محسوب می‌شوند، یعنی خود یک شی هستند؛ بنابراین می‌توانند ویژگی داشته باشند، در آرگومان‌های تابع‌ها داده شوند و مانند هر شی دیگری با آن‌ها رفتار شود

؛ توابع داخلی و بستارها: توابع داخلی (توابع تعریف شده داخل یک تابع دیگر) هر بار که تابع بیرونی فرا خوانده شود، ایجاد می‌شوند و متغیرهای توابع بیرونی تا زمانی که تابع داخلی وجود داشته باشد، وجود خواهند داشت، حتی پس از اتمام آن فراخوانی از تابع بیرونی. (مثال: اگر تابع داخلی به عنوانمقدار برگشتی تابع باشد، هنوز به متغیرهای تابع بیرونی دسترسی دارد) – این مکانیزم بستار گرفتن در جاوااسکریپت است.

ساختار شماتیک» محوری

؛ ساختار شماتیک: جاوااسکریپت به جای رده‌ها برای تعریف ویژگی‌های اشیاء، که شامل متدها و وراثت است از «ساختار شماتیک» استفاده می‌کند (پیش‌نمونه). امکان شبیه‌سازی بسیاری از امکانات رده-محور با ساختارهای شماتیک جاوااسکریپت امکان‌پذیر است.

توابع در نقش سازندهٔ اشیاء

برای توابع علاوه بر نقش عادی، به عنوان سازنده ی اشیاء هم عمل می‌کنند. آوردن یک new قبل فراخوانی تابع، آن را با کلمهٔ کلیدی this وابسته سازی شده به شی جدید اجرا می‌کند. ویژگی prototype از تابع مورد نظر، ساختار شماتیک شی جدید را مشخص می‌کند.

؛ توابع در نقش متد: بر خلاف بیشتر زبان‌های شی گرا تفاوتی میان تعریف تابع و متد وجود ندارد. بلکه تفاوت در زمان فراخوانی تابع است، زمانی که یک تابع به عنوان متد یک شی فراخوانده می‌شود کلمهٔ کلیدی this محلی آن تابع به شی مورد نظر وابسته سازی می‌شود.

امکانات دیگر

امکانات دیگر

جاوااسکریپت برای تأمین اشیاء و متدها که با آن‌ها تعامل کند به یک محیط اجرایی (مانند مرورگر وب) نیاز دارد تا بتواند به این ترتیب با دنیای خارج ارتباط برقرار کند. همچنین برای دسترسی به سایر نویسه‌ها (include) هم به این محیط نیازمند است (مانند تگ <script>در HTML). (البته این یک ویژگی زبانی نیست اما در عمل اغلب این طور پیاده‌سازی شده‌است)

؛ تعداد متغیر پارامتر (variadic): تعداد نامعینی پارامتر را می‌توان به یک تابع ارسال نمود. تابع می‌تواند هم از طریق پارامترهای رسمی و هم از طریق شی محلی arguments به آن‌ها دسترسی داشته باشد.

Literalهای آرایه و شی

مانند بسیاری از زبان‌های نویسه‌ای آرایه‌ها و اشیاء (که در زبان‌های دیگر همان آرایه‌های انتسابی هستند) را می‌توان با یک نحو موجز ایجاد و توصیف نمود. در واقع این شیوهٔ نگارش پایهٔ قالب داده‌ای جی‌سون هم هست.

عبارات منظم

جاوااسکریپت به شیوه‌ای مشابه زبان پرل از عبارات منظم پشتیبانی می‌کند که نحوی قدرتمند و موجز را به شکلی فراتر از توابع پیش ساخته برای کار با رشته‌ها، فراهم می‌کند.

نظام تایپ دهی

انواع زیر جزو انواع داده‌های قابل دسترس در زبان جاوااسکریپت است. در استاندارد ECMA انواع دیگری هم تعریف شده که صرفاً داخلی است و برای پیاده‌سازی است.[۸]

تعریف نشده: این تایپ فقط یک مقدار با نام undefined دارد و متعلق به تمام متغییرهای مقدار دهی نشده‌است

نوع تهی: نوع تهی هم فقط یک مقدار دارد با نام null

نوع دودویی: نمایندهٔ یک مقدار منطقی است و دو مقدار true و false را می‌پذیرد.

نوع رشته: در بر گیرندهٔ تمام رشته‌های متناهی از ۰ یا بیشتر عنصر ۱۶ بیتی بدون علامت است. این عناصر با اندیس‌های نامنفی قابل دسترسی هستند. طول رشته تعداد عناصر داخل آن و طول رشتهٔ تهی برابر ۰ است.

زمانی که رشته حاوی متن واقعی باشد هر عنصر به عنوان یک واحد UTF-16 در نظر گرفته می‌شود (مستقل از این که شیوهٔ واقعی نگه داری رشته چه باشد). تمام عملیات بر روی رشته‌ها آن‌ها را به عنوان اعداد صحیح بدون علامت در نظر می‌گیرند و تضمین کنندهٔ تولید رشته به حالت normalize شده نیست و تضمین‌های خاص زمانی هم ندارد. علت این تصمیم گیری سادگی در پیاده‌سازی ذکر شده‌است.

نوع عدد: نوع عدد در جاوااسکریپت مطابق با استادارد IEEE برای اعداد شناور دودویی است (با اندکی تفاوت).

نوع شی: شی در جاوااسکریپت یک مجموعه بدون ترتیب از ویژگی‌ها است. هر ویژگی می‌تواند داخلی، فقط-خواندنی، غیرقابل حذف، و غیرقابل پیمایش باشد (یا ترکیبی از این‌ها یا هیچ‌کدام)

تبدیلات خودکار

این زبان دارای تبدیلات خود کار بین این انواع داده‌ای است.

زمانی که بخواهد یک if را ارزیابی کند یا از عملگرهای منطقی ! و && و || استفاده شود، تبدیل به نوع دودویی را انجام می‌دهد. مقادیر ۰ و ۰- و NaN به false و سایر مقادیر عددی به true نگاشت می‌گردد. همچنین رشتهٔ تهی false و سایر رشته‌ها true در نظر گرفته می‌شود. انواع شی و تابع true و undefined و null هم false در نظر گرفته می‌شود.

زمانی که یکی از عملوندهای عملگر + رشته باشد، تبدیل به رشته صورت می‌گیرد، مانند ۵ + “۳۷” که می‌شود “۵۳۷”

عملگرهای دیگری عددی (جز جمع) منجر به تبدیل به عدد می‌گردد مانند ۳ – “۵۷” که مقدار عددی ۳۴- را به دست می‌دهد.[۹]

وانیلا جاوااسکریپت

وانیلا جاوااسکریپت یا وانیلا جی اس (Vanilla JS) اصطلاحی است که به همان زبان جاوااسکریپت اطلاق می‌شود. در حقیقت، وانیلا جی اس هیچ سکو (framework) یا کتابخانهٔ خاصی نیست. این اصطلاح بیشتر برای کسانی ساخته شده است که گمان می‌کنند برای استفاده از جاوااسکریپت، حتماً باید از کتابخانه‌های موجود یا سکوی خاصی استفاده بکنند.[۱۰]

وانیلا جی اس از آنجا که اصطلاحی دیگر برای استفاده از زبان جاوااسکریپت بدون استفاده از سکوی خاصی هست، سریع‌ترین کتابخانه جاوااسکریپت موجود تلقی می‌شود.[۱۱]

پانویس

آموزش تصویری #C

نگاه کوتاه

 از ویکی‌پدیا، دانشنامهٔ آزاد 

 سی شارپ

(به انگلیسی: C#)، زبانی شیءگرا و سطح بالا از خانوادهٔ زبان‌های چارچوب دات‌نت شرکت مایکروسافت است.

زبان سی شارپ، یک زبان برنامه‌نویسی چند الگویی و منظم شده مدل‌های تابعی، امری، عمومی، شیءگرا و جز گرا و در بستر دات نت می‌باشد. این زبان توسط مایکروسافت و جزئی از دات نت به وجود آمد و بعداً استانداردهای ECMA و ISO را نیز در بر گرفت. سی شارپ یکی از ۴۴ زبان برنامه‌نویسی است که توسط زمان اجرای زبان مشترک از چارچوب دات‌نت پشتیبانی می‌شوند و در همه جا به وسیله مایکروسافت ویژوال استودیو شناخته می‌شود.

زبان سی شارپ با قدرت و در عین حال سطح بالایی خود توانسته توجه بسیاری از برنامه نویسان را به خود جلب کند.

این زبان برپایه سادگی، مدرن بودن، همه منظوره و شیءگرا بودن ساخته شد. آندرس هجلزبرگ، طراح زبان برنامه‌نویسی دلفی، سرپرستی تیم طراحان زبان سی شارپ را بر عهده داشت. این زبان دارای دستوری شیءگرا مشابه ++C است و به شدت از زبان‌های جاوا و دلفینیازمندمدرک تأثیر پذیرفته‌است. در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در ژوئیه ۲۰۰۰، زمانی که مایکروسافت پروژه را عمومی اعلام کرد، اسم آن به سی شارپ تغییر پیدا کرد. آخرین نسخه آن نسخه ۵٫۰ است که همزمان با دات‌نت ۴٫۵ در اوت ۲۰۱۲ منتشر شد.

اهداف طراحی زبان

  • استاندارد ECMA این اهداف طراحی زبان را برای سی شارپ بر آورده می‌سازد:
  • سی شارپ یک زبان برنامه‌سازی ساده، مدرن، برای اهداف عمومی و شیءگرا است.
  • به دلیل اهمیت داشتن موضوع نیرومندی و دوام و بهره‌وری برنامه‌نویس، زبان دارای چک‌کننده Strong Type، چک‌کننده مرزهای آرایه، تشخیص حالت‌هایی که یک متغیر مقداردهی اولیه نشده‌است، قابلیت انتقال کدها و Garbage Collection خودکار است.
  • این زبان برای استفاده در اجزای توسعه نرم‌افزار برای دستیابی به مزایای سامانه‌های توزیعی در نظر گرفته شده‌است.
  • قابلیت انتقال برنامه‌نویس بسیار مهم است، خصوصاً برای آن دسته از برنامه‌نویسانی که با زبان‌های C و C++ آشنا هستند.
  • پشتیبانی از این زبان برای بین‌المللی شدن بسیار مهم است.
  • زبان سی شارپ برای نوشتن برنامه‌ها برای سامانه‌های تعبیه شده و میزبان در نظر گرفته شده‌است، سیستم‌عامل‌های پیچیده بسیار بزرگ گرفته تا توابع اختصاصی بسیار کوچک.
  • هر چند برنامه‌های نوشته شده با سی شارپ طوری هستند که از لحاظ حافظه و پردازنده مورد نیاز مقرون به صرفه باشند، ولی خود زبان از لحاظ اندازه و کارایی به خوبی زبان‌های C و اسمبلی نیست.

تاریخچه

در سال ۱۹۹۹، شرکت سان اجازه استفاده از زبان برنامه‌نویسی جاوا را در اختیار ماکروسافت قرار داد تا در سیستم‌عامل خود از آن استفاده کند. جاوا در اصل به هیچ پلت فرم یا سیستم‌عاملی وابسته نبود، ولی ماکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستم‌عامل بودن جاوا را از آن برداشت. شرکت سان پرونده‌ای علیه ماکروسافت درست کرد و ماکروسافت مجبور شد تا زبان شیءگرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت، کلاس‌های کتابخانه‌ای با زبان و کامپایلر SMC نوشته شدند. در سال ۱۹۹۹ آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود و همانند C بود با خواص شیءگرایی. ماکروسافت در نظر داشت اسم این زبان را تا آخر Cool قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی چارچوب دات‌نت درPDC در سال ۲۰۰۰ این زبان به سی شارپ تغییر نام یافت و کتابخانه کلاس‌ها و runtime در ای‌اس‌پی‌دات‌نت به سی شارپ منتقل شدند. مدیر و سرپرست طراحان در ماکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبان‌های برنامه سازی++Borland، دلفی (شهر)،Turbo Pascal، ویژوال سی++ به آسانی در دستورالعمل‌های سی شارپ قابل رویت است و به همان خوبی در هسته CLR.

ویژگی‌ها

برخی از تفاوت‌های زبان سی شارپ با C و ++C عبارتند از:

  • هیچ تابع یا متغیر سراسری(Global) وجود ندارد، تمام متدها و اعضا بایستی در داخل کلاس‌ها تعریف شوند. این امر ممکن است، هر چند برای استفاده از متغیرها و توابع عمومی باید از متدها و متغیرها در کلاس‌های عمومی استفاده کرد.
  • متغیرهای عمومی، بر خلاف C و ++C، نمی‌توانند بلاک‌های پیوستی را در بر بگیرند.
  • سی شارپ دارای یک نوع داده بولی است (bool). برخی از عبارت‌ها مانند while و if که شرطی هستند، نیازمند یک عبارت نوع بولی هستند. همان‌طور که ++C نیز دارای نوع داده بولی است، این نوع داده به راحتی می‌تواند به یا از Integerها تبدیل شود، و عبارتی مانند (if(a نیازمند این امر است که a از یک نوع قابل تبدیل به bool یا اشاره گر باشد. کامپایلر سی شارپ برنامه نویس را در این شرایط مجبور به استفاده از عباراتی می‌کند که به درستی یک مقدار bool را برمی‌گردانند؛ بنابراین دستوری مانند (if(a = b باعث بروز خطا می‌شوند. (به جای = بایستی از == استفاده شود)
  • در سی شارپ، اشاره گرهای به حافظه بایستی فقط در داخل بلوکهای unsafe استفاده شوند و برنامه در این حالت برای اجرا نیاز به اجازه از کاربر دارد. بیشتر دسترسی شی از طریق شی امن است که یا همیشه در حال اشاره به شی صحیح موجود است یا یک مقدار Null دارد. اشاره گری به شی به درد نخور یا بلاک حافظه رندم غیرممکن است. اشاره گر نا امن می‌تواند به نمونه‌ای از value-type، آرایه، رشته یا بلاکی که حافظه به آن داده شده‌است اشاره نماید. کدی که به عنوان نا امن علامت نخورده باشد، هنوز می‌تواند اشاره گرها را از سامانه بازیابی یا در آن ذخیره کند ولی نمی‌تواند مرجع جدیدی به آنها اختصاص دهد.
  • حافظه ساماندهی شده نمی‌تواند صریحاً آزاد شود، ولی به طور خودکار به عنوان به درد نخور تلقی می‌شود. انتخاب آدرس‌های به درد نخور حافظه نفوذ ناپذیر است. هم چنین سی شارپ با استفاده از عبارات، پشتیبانی مستقیمی از پایان اجباری می‌کند (پشتیبانی از اصطلاح Resource Acquisition Is Initialization).
  • وراثت چندگانه از کلاس‌ها در این زبان پشتیبانی نمی‌شود. البته یک کلاس امکان ارث بری از تعداد نامحدود واسط‌ها را دارد. پشتیبانی نکردن از وراثت چندگانه به دلیل اهداف معماری این زبان در CLI و برای جلوگیری از پیچیدگی است. در عوض می‌توان از اینترفیس‌های مختلف استفاده کرد. یعنی برای یک کلاس که احتمالاً فرزند کلاسی دیگر است (ارث برده) می‌توان چندین اینترفیس را پیاده‌سازی (Implement) نمود.
  • سی شارپ بسیار typesafe تر از C++ است. تنها تبدیلات ضمنی مثل تبدیل نوع داده کوچکتر به بزرگتر یا تبدیل نوع مشتق شده به نوع پایه به طور پیش فرض و بدون خطا صورت می‌پذیرد. هیچ تبدیل ضمنی ای میانBooleanها و Integerها وجود ندارد و هر تبدیل user-defined بایستی به صراحت با یکی از کلمات explicit یا implicit نشانه گذاری شود. تبدیل b به a در حالتی که a یک Integer و b یک double باشد در زبان C++ مجاز است اما در سی شارپ به یک خطای زمان کامپایل منجر می‌شود (بایستی به صورت explicit تعریف شود)
  • اعضای Enumeration در داخل محدوده شخصی خود قرار دارند.
  • سی شارپ قابلیت syntactic sugar را برای توابع متداول، اکسسورها و ماجول‌های کسول شده در یک کلاس به صورت ویژگی‌ها قرار داده‌است.

اکسسورها که خاصیت نیز گفته می‌شوند در زبان سی شارپ قادر به کنترل دسترسی اعضا و معتبرسازی داده‌ها هستند.

  • تمام انواع بازتابی(Reflection) و بازیابی(Recovery) قابل استفاده‌است.
  • در حال حاضر (۳ ژوئن ۲۰۰۸) دارای ۷۷ کلمه رزرو شده‌است.

ساختمان داده (ساختار و ذخیر سازی داده)

این کمپایلر در مقابل C یا ++C دارای ساختار بسیار متفاوتی است که دانستن آن به برنامه نویس امکان نوشتن برنامه‌های بسیار بهینه را خواهد داد.

رشته‌هادر C و یا ++C ساختار رشته به صورت ارایه‌ای از نوع char بود که امکان اضافه کردن به رشته را محدود می‌کرد به دلیل ثابت بودن طول در آغاز تعریف ولی در سی شارپ دو نوع متفاوت رشته وجود دارد؛ که یکی به صورت ارایه‌ای با طول ثابت ۲۵۶(در عمل ۲۵۵)موجوداست (به صورت پیش فرض) و در صورتی که با کمبود جا روبرو شود فضای جدید (بزرگتر) یافته و به ان انتقال می‌دهد؛ ولی در نوع دوم رشته‌ها از لیست پیوندی اسفاده می‌شود.

سامانه یکپارچه شده

سی شارپ دارای یک سامانه نوع یکپارچه‌است که به آن CTS می‌گویند. این بدان معناست که تمام انواع، شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند. به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث می‌برد. بخاطر کارائی، انواع اولیه (و انواع مقداری) به طور داخلی فضایی برای آنها بر روی پشته در نظر گرفته می‌شود.

انواع داده

CTS داده‌ها را به دو نوع تقسیم می‌کند:

  • نوع مقداری (Value Type)
  • نوع مرجعی (Refrence Type)

انواع داده‌ای توده ساده‌ای از داده می‌باشند. نمونه‌های انواع داده‌ای نه هویت مرجعی دارند و نه مفاهیم مقایسه مراجع را. برای مقایسه برابری یا عدم برابری انواع داده‌ای، خود مقدار داده‌ها را با یکدیگر مقایسه می‌کنیم مگر اینکه عملگرهای مشابه دوباره تعریف شده باشند. مقادیر داده‌های مرجعی همیشه یک مقدار پیش فرض دارند و همیشه می‌توانند ایجاد و یا کپی شوند. یکی دیگر از محدودیت‌های انواع داده‌ای این ات که آنها نمی‌توانند از یکدیگر مشتق شوند (ولی می‌توانند اشتراکاتی داشته باشند) و هم چنین نمی‌توانند در سازنده مقدار دهی اولیه شوند. مثالی از انواع داده‌ای، بعضی از انواع اولیه مانند int و float و char و System.DateTime می‌باشند. در مقابل، انواع مرجعی مفهوم تعریف مرجعی را دارند (که در آن هر نمونه از نوع مرجع، به طور ذاتی از دیگر نمونه‌ها جدا می‌شود، حتی اگر داده هر دو نمونه یکی باشد). این دقیقاً نمونه مشابه مقایسه تساوی یا عدم تساوی داده‌های مرجعی است، که در آن آزمایش برای مرجع‌ها از داده‌ای‌ها سریع تر است. در کل نه همیشه امکان تعریف نمونه مرجعی وجود دارد و نه امکان کپی یا نمایش مقادیر مقایسه دو نمونه؛ ولی به هر حال انواع مرجعی خاص می‌توانند این اعمال را از طریق سازنده‌های عمومی یا اجرای واسط‌های مشابه (مثل ICloneable یا IComparable) انجام دهند. نمونه‌هایی از انواع مرجعی، اشیاء، System.String و Sysmet.Array می‌باشند. هر دو نوع داده قابلیت انعطاف توسط تعریف به وسیله کاربر را دارند. در واقع وقتی ما نوع داده‌ای را به تابع ای ارسال می‌کنیم، آدرس داده نیز فرستاده می‌شود. البته این امر پیش فرض است ولی برای داده‌های مثل آرایه، رشته‌ای، آدرس فرستاده می‌شود و ارسال از نوع مرجع می‌شود

آموزش تصویری دستورات مهم JavaScript

نگاه کوتاه

JavaSript

از ویکی‌پدیا، دانشنامهٔ آزاد

جاوااسکریپت (به انگلیسی: JavaScript) زبان برنامه‌نویسی اسکریپت مبتنی بر اشیاء است که توسط NetScape تولید شده‌است. این زبان، یک زبان شی‌گرا[۱] است که بر اساس استاندارد ECMA-262 Edition 3 نوشته شده‌است.
علیرغم اشتباه عمومی، زبان جاوااسکریت با زبان جاوا ارتباطی ندارد، اگر چه ساختار این زبان به سی پلاس پلاس(++C) و جاوا شباهت دارد؛ که این امر برای یادگیری آسان در نظر گرفته شده‌است. از همینرو دستورهای متداول مانند if, for,try..catch ,”while” و… در این زبان هم یافت می‌گردند.
این زبان می‌تواند هم به صورت ساخت یافته و هم به صورت شی گرا مورد استفاده قرار گیرد. در این زبان اشیاء با اضافه شدن متدها و خصوصیات پویا به اشیاء خالی ساخته می‌شوند، بر خلاف جاوا. بعد از ساخته شدن یک شی به روش فوق، این شی می‌تواند به عنوان نمونه‌ای برای ساخته شدن اشیاء مشابه مورد استفاده قرار گیرد.
به علت این قابلیت زبان جاوااسکریپت برای ساختن نمونه از سیستم مناسب می‌باشد.
کاربرد گسترده این زبان در سایتها و صفحات اینترنتی می‌باشد و به کمک این زبان می‌توان به اشیاء داخل صفحات HTML دسترسی پیدا کرد و آنها را تغییر داد. به همین علت برای پویا نمایی در سمت کاربر، از این زبان استفاده می‌شود.
JavaScript به صورت «جاواسکریپت» خوانده می‌شود، ولی در فارسی به صورت «جاوااسکریپت» ترجمه می‌شود و اگر به صورت «جاوا اسکریپت» ترجمه شود اشتباه است چون دو کلمه جدا از هم نیست و اگر به صورت دو کلمه جدا نوشته شود خطلاهای نگارشی ایجاد می‌شود، به طور مثال ممکن است کلمه جاوا در انتهای خط و کلمه اسکریپت در ابتدای خط بعدی نوشته شود.

تاریخچه

جاوااسکریپت را در ابتدا شخصی به نام برندان ایچ در شرکت نت‌اسکیپ با نام Mocha طراحی نمود. این نام بعداً به LiveScript و نهایتاً به جاوااسکریپت تغییر یافت.[۲] این تغییر نام تقریباً با افزوده شدن پشتیبانی از جاوا در مرورگر وب Netscape Navigator همزمانی دارد. اولین نسخهٔ جاوااسکریپت در نسخه ۲٫۰B3 این مرورگر در دسامبر ۱۹۹۵ معرفی و عرضه شد. این نام گذاری منجر به سردرگمی‌های زیادی شده و این ابهام را ایجاد می‌کند که جاوااسکریپت با جاوا مرتبط است در حالی که این طور نیست. عدهٔ زیادی این کار را یک ترفند تجاری برای به دست آوردن بخشی از بازار جاوا که در آن موقع زبان جدید مطرح برای برنامه‌نویسی تحت وب بود می‌دانند.[۳][۴]

به دلیل موفقیت عمدهٔ جاوااسکریپت در نقش زبان نویسه‌ای سمت کاربر (client side scripting language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را جی اسکریپت نامید. این زبان در نسخه ۳٫۰ از مرورگر اینترنت اکسپلورر و در اوت ۱۹۹۶ داده شد. تفاوت‌های این دو زبان به حدی جزیی است که اغلب جی اسکریپت و جاوااسکریپت به جای هم به کار می‌روند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت جی اسکریپت با استاندارد ECMA مطرح می‌کند.

نت‌اسکیپ جاوااسکریپت را به سازمان Ecma International برای استاندارد سازی ارسال کرده‌است و نتیجه نسخهٔ استاندارد شده‌ای به نام ECMA Script است.[۵]

جاوااسکریپت به یکی از زبان‌های برنامه‌نویسی پر طرفدار در وب تبدیل شده‌است. هر چند ابتدا بسیاری از برنامه نویسان حرفه‌ای زبان را کم ارزش تلقی می‌کردند چون مخاطبین آن نویسندگان صفحات وب و آماتورهای این چنینی بودند.[۶] ظهور ای‌جکس بار دیگر جاوااسکریپت را در معرض توجه قرار داد و برنامه نویسان حرفه‌ای بیشتری را به خود جذب نمود. نتیجه ازدیاد فریمورک و کتابخانه‌های جامعی در این زمینه، بهبود شیوه‌های رایج برنامه‌نویسی در جاوااسکریپت و افزایش کاربرد جاوااسکریپت خارج از وب است.[نیازمند منبع]

امکانات زبانی

امکانات زیر (در صورت قید نشدن) همگی مطابق استاندارد ECMA Script می‌باشند.

فریم ورک های مبتنی برجاوا اسکریپت

فریم ورک های زیادی برای این زبان درست شده است مانند جی کوئری و آنگولار جی اس

زبان امری و ساخت یافته

جاوااسکریپت از تمامی نحو ساختاری زبان C پشتیبانی می‌کند. مانند گزاره (if و switch و حلقه‌های while و…) یک مورد استثناء تعیین حوزهٔ متغیرهاست: تعریف حوزه در حد block در جاوااسکریپت وجود ندارد. هر چند جاوااسکریپت ۱٫۷ با کلمهٔ کلیدی let این نوع حوزه دهی را امکان‌پذیر می‌سازد. مانند c در جاوااسکریپت بین عبارت و گزاره تفاوت وجود دارد.

پویایی

؛ تایپ دهی پویا: مانند اکثر زبان‌های نویسه‌ای تایپ به مقدارها منسوب می‌گردد و نه به متغیرها. برای مثال متغیر x ممکن است به یک عدد وابسته سازی شود، و بعداً به یک رشته. جاوااسکریپت برای تعیین تایپ شی راه‌های مختلفی از جمله تایپ دهی اردکی (duck typing) را دارد.[۷]

؛ تایپ دهی ضعیف: زبان جاوااسکریپت از نظر تایپ دهی ضعیف به شمار می‌آید و در آن نتیجهٔ عملیاتی مانند ۵ + “۳۷”، عبارت “۵۳۷” خواهد بود. (عدد را با رشته جمع کرده‌است)

؛ اشیاء به دید آرایه‌های انتسابی: جاوااسکیرپت تقریباً تماماً بر اساس اشیاء است. اشیاء، آرایه‌های انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیاء، کلیدهای آرایه انتسابی هستند و درواقع obj.x = ۱۰ با obj[“x”] = ۱۰ هم ارز هستند و شیوه نگارش با نقطه صرفاً یک سهولت نحوی است. ویژگی‌ها و مقدارهایشان در زمان اجرا قابلیت تغییر اضافه و حذف دارند. همچنین می‌توان روی ویژگیهای یک شی با ساختار for … in پیمایش کرد.

؛ ارزیابی در زمان اجرا: جاوااسکریپت یک تابع eval دارد که قادر است گزاره‌های تولید شده در یک رشته در زمان اجرا را، اجرا کند.

تابعی بودن

؛ تابعی بودن: توابع موجوداتی «درجه اول» محسوب می‌شوند، یعنی خود یک شی هستند؛ بنابراین می‌توانند ویژگی داشته باشند، در آرگومان‌های تابع‌ها داده شوند و مانند هر شی دیگری با آن‌ها رفتار شود

؛ توابع داخلی و بستارها: توابع داخلی (توابع تعریف شده داخل یک تابع دیگر) هر بار که تابع بیرونی فرا خوانده شود، ایجاد می‌شوند و متغیرهای توابع بیرونی تا زمانی که تابع داخلی وجود داشته باشد، وجود خواهند داشت، حتی پس از اتمام آن فراخوانی از تابع بیرونی. (مثال: اگر تابع داخلی به عنوان مقدار برگشتی تابع باشد، هنوز به متغیرهای تابع بیرونی دسترسی دارد) – این مکانیزم بستار گرفتن در جاوااسکریپت است.

ساختار شماتیک» محوری

؛ ساختار شماتیک: جاوااسکریپت به جای رده‌ها برای تعریف ویژگی‌های اشیاء، که شامل متدها و وراثت است از «ساختار شماتیک» استفاده می‌کند (پیش‌نمونه). امکان شبیه‌سازی بسیاری از امکانات رده-محور با ساختارهای شماتیک جاوااسکریپت امکان‌پذیر است.

توابع در نقش سازندهٔ اشیاء

برای توابع علاوه بر نقش عادی، به عنوان سازنده ی اشیاء هم عمل می‌کنند. آوردن یک new قبل فراخوانی تابع، آن را با کلمهٔ کلیدی this وابسته سازی شده به شی جدید اجرا می‌کند. ویژگی prototype از تابع مورد نظر، ساختار شماتیک شی جدید را مشخص می‌کند.

؛ توابع در نقش متد: بر خلاف بیشتر زبان‌های شی گرا تفاوتی میان تعریف تابع و متد وجود ندارد. بلکه تفاوت در زمان فراخوانی تابع است، زمانی که یک تابع به عنوان متد یک شی فراخوانده می‌شود کلمهٔ کلیدی this محلی آن تابع به شی مورد نظر وابسته سازی می‌شود.

امکانات دیگر

امکانات دیگر

جاوااسکریپت برای تأمین اشیاء و متدها که با آن‌ها تعامل کند به یک محیط اجرایی (مانند مرورگر وب) نیاز دارد تا بتواند به این ترتیب با دنیای خارج ارتباط برقرار کند. همچنین برای دسترسی به سایر نویسه‌ها (include) هم به این محیط نیازمند است (مانند تگ <script>در HTML). (البته این یک ویژگی زبانی نیست اما در عمل اغلب این طور پیاده‌سازی شده‌است)

؛ تعداد متغیر پارامتر (variadic): تعداد نامعینی پارامتر را می‌توان به یک تابع ارسال نمود. تابع می‌تواند هم از طریق پارامترهای رسمی و هم از طریق شی محلی arguments به آن‌ها دسترسی داشته باشد.

Literalهای آرایه و شی

مانند بسیاری از زبان‌های نویسه‌ای آرایه‌ها و اشیاء (که در زبان‌های دیگر همان آرایه‌های انتسابی هستند) را می‌توان با یک نحو موجز ایجاد و توصیف نمود. در واقع این شیوهٔ نگارش پایهٔ قالب داده‌ای جی‌سون هم هست.

عبارات منظم

جاوااسکریپت به شیوه‌ای مشابه زبان پرل از عبارات منظم پشتیبانی می‌کند که نحوی قدرتمند و موجز را به شکلی فراتر از توابع پیش ساخته برای کار با رشته‌ها، فراهم می‌کند.

نظام تایپ دهی

انواع زیر جزو انواع داده‌های قابل دسترس در زبان جاوااسکریپت است. در استاندارد ECMA انواع دیگری هم تعریف شده که صرفاً داخلی است و برای پیاده‌سازی است.[۸]

تعریف نشده: این تایپ فقط یک مقدار با نام undefined دارد و متعلق به تمام متغییرهای مقدار دهی نشده‌است

نوع تهی: نوع تهی هم فقط یک مقدار دارد با نام null

نوع دودویی: نمایندهٔ یک مقدار منطقی است و دو مقدار true و false را می‌پذیرد.

نوع رشته: در بر گیرندهٔ تمام رشته‌های متناهی از ۰ یا بیشتر عنصر ۱۶ بیتی بدون علامت است. این عناصر با اندیس‌های نامنفی قابل دسترسی هستند. طول رشته تعداد عناصر داخل آن و طول رشتهٔ تهی برابر ۰ است.

زمانی که رشته حاوی متن واقعی باشد هر عنصر به عنوان یک واحد UTF-16 در نظر گرفته می‌شود (مستقل از این که شیوهٔ واقعی نگه داری رشته چه باشد). تمام عملیات بر روی رشته‌ها آن‌ها را به عنوان اعداد صحیح بدون علامت در نظر می‌گیرند و تضمین کنندهٔ تولید رشته به حالت normalize شده نیست و تضمین‌های خاص زمانی هم ندارد. علت این تصمیم گیری سادگی در پیاده‌سازی ذکر شده‌است.

نوع عدد: نوع عدد در جاوااسکریپت مطابق با استادارد IEEE برای اعداد شناور دودویی است (با اندکی تفاوت).

نوع شی: شی در جاوااسکریپت یک مجموعه بدون ترتیب از ویژگی‌ها است. هر ویژگی می‌تواند داخلی، فقط-خواندنی، غیرقابل حذف، و غیرقابل پیمایش باشد (یا ترکیبی از این‌ها یا هیچ‌کدام)

تبدیلات خودکار

این زبان دارای تبدیلات خود کار بین این انواع داده‌ای است.

زمانی که بخواهد یک if را ارزیابی کند یا از عملگرهای منطقی ! و && و || استفاده شود، تبدیل به نوع دودویی را انجام می‌دهد. مقادیر ۰ و ۰- و NaN به false و سایر مقادیر عددی به true نگاشت می‌گردد. همچنین رشتهٔ تهی false و سایر رشته‌ها true در نظر گرفته می‌شود. انواع شی و تابع true و undefined و null هم false در نظر گرفته می‌شود.

زمانی که یکی از عملوندهای عملگر + رشته باشد، تبدیل به رشته صورت می‌گیرد، مانند ۵ + “۳۷” که می‌شود “۵۳۷”

عملگرهای دیگری عددی (جز جمع) منجر به تبدیل به عدد می‌گردد مانند ۳ – “۵۷” که مقدار عددی ۳۴- را به دست می‌دهد.[۹]

آموزش تصویری HTML

نگاه کوتاه

HTML

از ویکی‌پدیا، دانشنامهٔ آزاد
(تغییرمسیر از HTML)
اچ‌تی‌ام‌ال
HTML.svg
استانداردهای وب
HTML
RDF
CSS
DOM
XHTML
XML
SVG
W3C
DHTML

زبان نشانه‌گذاری ابرمتنی یا زنگام[۱] یا اچ‌تی‌ام‌ال، HTML یا HyperText Markup Language در کنار سی‌اس‌اس هستهٔ فناوری ساخت صفحه‌های وب هستند. اچ‌تی‌ام‌ال زبان توصیف ساختار صفحه‌های وب است.[۲] زبانی‌است برای نشانه‌گذاری ابرمتن که برای تدوین قالب و طراحی صفحه‌های وب به کار می‌برند. دستورعمل‌های این زبان، برچسب (Tag) نام دارند که محتوای یک صفحهٔ وب، با آن‌ها، نشانه‌گذاری شده و بدین‌ترتیب، نحوهٔ نمایش آن صفحه برای مرورگرهای وب، توصیف می‌شود.

این زبان در خلال دهه ۹۰ توسط دنیس ریچی ابداع شد.

تاکنون نسخهٔ ۵ آن عرضه است.[۳]

هر یک از برچسب‌های اچ‌تی‌ام‌ال، معنا و مفهوم خاصی دارند و تأثیر مشخصی بر محتوا می‌گذارند؛ مثلاً برچسب‌هایی برای تغییر شکل ظاهری متن، نظیر درشت و ضخیم کردن یک کلمه یا برقراری پیوند به صفحات دیگر در اچ‌تی‌ام‌ال تعریف شده‌اند.

یک سند اچ‌تی‌ام‌ال، یک پروندهٔ مبتنی بر متن (Text–based) است که معمولاً با پسوند .htm یا .html نام‌گذاری شده و محتویات آن از برچسب‌های اچ‌تی‌ام‌ال تشکیل می‌شود. مرورگرهای وب، که قادر به درک و تفسیر برچسب‌های اچ‌تی‌ام‌ال هستند، تک‌تک آن‌ها را از داخل سند اچ‌تی‌ام‌ال خوانده و سپس محتوای آن صفحه را نمایان‌سازی (Render) می‌کنند.

اچ‌تی‌ام‌ال زبان برنامه‌نویسی نیست، بلکه زبانی برای نشانه‌گذاری ابرمتن است و اساساً برای ساخت‌مند کردن اطلاعات و جدایش اجزای منطقی یک نوشتار — نظیر عناوین، تصاویر، فهرست‌ها، بندها و جداول — به کار می‌رود. از سوی دیگر، اچ‌تی‌ام‌ال را نباید به عنوان زبانی برای صفحه‌آرایی یا نقاشی صفحات وب به کار بُرد؛ این وظیفه اکنون بر دوش فناوری‌های دیگری همچون سی‌اس‌اس است.

گفتنی است اچ‌تی‌ام‌ال شکلی از زبان دیگری بنام اس‌جی‌ام‌ال است و World Wide Web Consortium آن را به عنوان استانداردی برای نشانه‌گذاری مستندات ابرمتنی برای عرضه در وب، تدوین کرده‌است.

در اچ‌تی‌ام‌ال سه نوع برچسب وجود دارد:

  1. تگ‌های یکه. مانند ‎<HR>‎ که خط رسم می‌کند.
  2. تگ‌هایی که شروع و پایان دارند. مثل: ‎<head></head>‎
  3. تگ‌هایی که دارای ویژگی می‌باشند. مثل:

‎<a href=”http://www.w3.org”>متن</a>‎

تاریخچه[ویرایش]

توسعه[ویرایش]

در سال ۱۹۸۰ فیزیکدانی به نام Tim Berners-Lee که با پروژهٔ CERN همکاری داشت ENQUIRE را طراحی و ارائه کرد که یک سیستم مهم برای محققان CERN بود تا اینکه از این داده‌ها به شکل مشترک استفاده کنند. در سال ۱۹۸۹، Berners- Lee یک یادداشت پیشنهاد یک سیستم ابر متن مبتنی بر اینترنت نوشت. Berners- Lee یک نوع خاص HTML را مشخص نمود و یک نسخهٔ جستجوگر و نرم‌افزار سرور را در انتهای۱۹۹۰ نوشت. در این سالیان این فیزیکدان و مهندس سیستم‌های داده‌های CERN بنام Robert Cailliau یک سرمایه‌گذاری مشترک را انجام دادند ولی این پروژه به شکل رسمی توسط CERN دنبال نشد. در یادداشت‌های شخصی او از سال ۱۹۹۰ اشاره شده است که برخی از مناطق مختلف ابر متن (hypertext) به کار گرفته شده است و در ابتدای آن از یک دائرهالمعارف استفاده گردید.

اولین بار شرح کامل HTML به این شکل بود که به آن در نسخه‌های قبلی “HTML Tags” گفته شد که برای اولین بار توسط Berners –Lee در سال ۱۹۹۱ روی اینترنت قرار گرفت؛ که آن توصیف ۱۸ عناصر شامل عناصر اولیه، طراحی نسبتاً ساده از HTML بود. به غیر از Hyperlink این موارد تحت تاثیر SGMLguid در فرمت مبتنی بر SGML قرار گرفت و در پروژهٔ CERN به کار. رفت یازده مولفه از آن در HTML 4 نوشته شده است.

زبان نشانه گذاری ابرمتنی به شکلی است که مرورگرهای وب برای تحلیل و نوشتن متون تصاویر و دیگر مواد روی صفحات قابل شنیدن و قابل دیدن وب به کار می‌رود. ویژگی‌های پیش فرض برای هر مورد در ساختار HTML در جستجوگر تعریف شده است و این ویژگی‌ها را می‌توان تغییر داد و یا اینکه توسط CSS بر اساس طراحی صفحه افزایش داد. بسیاری از اجزای متن در گزارش فنی ۱۹۸۸ ISO به شکل TR9537 ارائه شده است که نام این جزء روش‌های استفاده از SGML بود که در آن ویژگی‌های اولیه ساختار زبانی مانند آنچه که در مورد فرمان RUNOFF دیده می‌شود استفاده شد که در ابتدای دهه ۱۹۶۰ برای CTSS ارائه شده است. این فرمان‌های ساختاری از فرمان‌های مورد استفاده توسط typesetters استفاده می‌کند که به شکل دستی برای فرمت‌های مختلف در نظر گفته شده‌اند. اما اصل SGML برای ساختار کلی بر اساس اجزای مختلف است (محدوده‌های حاشیه نویسی تو در تو به همراه ویژگی‌هایی که دارد) تا اینکه از اثرات چاپ استفاده شود. همچنین جداسازی ساختارها و شکل ترکیبی نیز باید در نظر گرفته شود. HTML به شکل مداوم به این صورت با CSS به کار گرفته می‌شود.

Berners- Lee از HTML به عنوان یک ابزار برای SGML استفاده کرده است. به طور کلی آنرا به عنوان دستور نیروی ضربت مهندسسی اینترنت(IETF) تعریف کرده است که در سال ۱۹۹۳ نسخه‌های اولیه از آن را بر اسا HTML ارائه نمود.”زبان نشانه گذاری ابرمتنی HTML” پیش نویسی اینترنتی توسط Dan Cannolly ،Berners- Lee ارائه گردید و درون تعریف نوع سند SGML برای تعریف گرامر ارائه شد. این نسخه اولیه پس از شش ماه منقضی گردید ولی قابل توجه اینکه از جستجو گرNCSA Mosaic به شکل جستجو گر پیش فرض برای تصاویر بر خط استفاده شد که نشان دهندهٔ فلسفهٔ IETF در استانداردهای ساختارهای موفق است. به همین شکل Dave Raggett’s رقابت خود را با ارائه(Internet-Draft , HTML+(Hypertext Markup format از انتهای ۱۹۹۳ شروع کرد و پیشنهاد کرد که یک ساختار اجرایی مانند جداول و شکلهای پر شونده را می‌توان برای این منظور به کار گرفت.

پس از انکه HTML و +HTML به شکل پیش نویس در ابتدای ۱۹۹۴ منقضی گردید،IEFT یک گروه کاری HTML را ایجاد کرد که در سال ۱۹۹۵ نسخهٔ HTML 2.0 تکیمل گردید، HTML اولیه با این قصد ساخته شده که به شکل یک ساختار استاندارد در آینده از آن استفاده شود.

پس از آن پیشرفت‌هایی در IETF در نظر گرفته شد که مورد توجه رقیبان قرار گرفت. تا سال ۱۹۹۶ ویژگی‌های HTML حفظ شد و ورودی‌هایی از نرم‌افزارهای تجاری گرفته شد که این کار توسط (W3C) انجام شد. اما در سال ۲۰۰۰ HTML یک استاندارد بین‌المللی (ISO/IEC 15445:2000) گردید. HTML4.01 در انتهای ۱۹۹۹ انتشار یافت و پس از آن ساختار بعدی آن در سال ۲۰۰۱ به شکل کامل منتشر شد- در سال ۲۰۰۴ پیشرفت‌هایی در HTML5 در (WHATWG) در نظر گرفته شد و شکل قابل ان تشار آن به شکل W3C در سال ۲۰۰۸ ارائه گردید.

نسخه‌های HTML جدول زمانی[ویرایش]

۲۱ نوامبر ۱۹۹۵[ویرایش]

HTML 2.0 به شکل IETF RFC 1866 انتشار یافت.RFCs تکمیلی ظرفیت‌های زیر را داشت:

  • ۲۵ نوامبر RFC 1867:1995 (آبلود فایل مبتنی بر فایل)
  • می RFC 1942:1996 (جداول)
  • اگوست RFC 1980:1996(نقشه‌های تصویری سمت مشتریان)
  • ژانویه RFC 207O:1997 (بین‌المللی شده)

ژانویه ۱۹۹۷[ویرایش]

HTML3.2 به شکل توصیه نامهٔ W3C انتشار یافت. نسخه اول پیشرفت داده شد و استاندارد کردن آن به شکل انحصاری توسط W3C انجام شد به همین شکل IETF گروه کاری خود HTML را در سپستامبر ۱۹۹۶ کاملاً ارائه کرد. در ابتدا این فرمان را Wilbur نامید. HTML3.2 فرمول‌های ریاضی را به طور کامل به کار گرفت، که در آن همپوشانی‌هایی در اجزای مختلف پیشرفت کرده آن داشت و از مهم ترین ابزارهای تصویری Netscape استفاده شده بود. عناصر مبهم Netscape و عناصر متحرک Microsoft مورد استفاده قرار نگرفت که دلیل آن توافق دو طرفه میان دو شرکت بود. ساختار ریاضی مورد استفاده مشابه با HTML بود ولی استاندارد کردن آن تا ۱۴ ماه پس از MathML انجام نگرفت.

دسامبر۱۹۹۷[ویرایش]

html 4.0 توصیه W3C را ارائه کرد که در آن سه تفاوت عمده اعمال شده بود:

  • مشکل کلی که در آن اجزای بد پنهان شده بودند.
  • انتقالی که در آن اجزای بد اجازه داده شده بودند.
  • قاب که در آن قاب با اجزای مختلف مرتبط اجازه داده شده بودند.

درابتدا با کدنام “Cougar” نامگذاری شده بود و ۰٫HTML4 از انواع اجزای خاص جستجوگر و ساختارهای مختلف استفاده کرده بود ولی در همان زمان مرحله‌ای در نظر گرفته شد که از ویژگی‌های نشانه گذاری بصری Netscap را با مارک آنها به عنوان نفع شیوه نامه‌ها توصیه نمی‌شود. HTML 4 یک برنامه SGML مطابق با ISO 8879 است.

آوریل ۱۹۹۸[ویرایش]

HTML4.0 برخی تغییرات انداک را دوباره انجام داد بدون آنکه تعداد نسخه‌ها را افزایش دهد.

دسامبر ۱۹۹۹[ویرایش]

HTML4.01 به توصیهٔ W3C انتشار یافت. در آن سه تغییر کلی به شکل HTML4.0 در نظر گرفته شد و اخرین غلط نامه در ۱۲ می ۲۰۰۱ انتشار یافت.

می ۲۰۰۰[ویرایش]

۲۰۰۰:ISO/IEC ۱۵۴۴۵ به عنوان استاندارد بین‌المللی ISO/IEC انتشار یافت. در ISO این استاندارددر حوزه ISO/IEC JTC1/SC34 قرارگرفت. دراواسطISO/IEC15445:2000,HTML4.01 :۲۰۰۸ جدیدترین نسخه‌های HTML ارائه شد. پیشرفت‌های موازی صورت گرفته، باعث شد که XHTML مبتنی بر XML حاصل شود که توسط گروه کاری W3CHTML در طی اوایل و اواسط ۲۰۰۰ اشغال شده بود.

جدول زمانی نسخه‌های پیش نویس HTML[ویرایش]

اکتبر ۱۹۹۱[ویرایش]

برچسب‌های HTML فهرستی از نسخه‌های غیر رسمی CERN که در آن ۱۸ برچسب‌های HTML وجود دارد که برای اولین بار برای عموم مورد استفاده قرار گرفت.

ژوئن ۱۹۹۲[ویرایش]

پیش نویس غیر رسمی اول HTML DTD هفت بار مورد اصلاح قرار گرفت(۱۵ ژوئیه، ۶آگوست، ۱۸ آگوست، ۱۷ نوامبر، ۱۹نوامبر، ۲۰نوامبر و ۲۲نوامبر)

نوامبر ۱۹۹۲[ویرایش]

HTML DTD1.1 اولین نسخه دارای اعداد بر مبنای اصلاحات RCS که با ۱٫۱ شروع شد تا اینکه با ۱٫۰ شروع شود و این به عنوان نسخه غیر رسمی درآمد

ژوئن ۱۹۹۳[ویرایش]

زبان ساختاری Hypertext توسط گروه کاری IETF IIIR به عنوان نسخهٔ اینترنتی درآمد (که یک پیش نویس برای استاندارد در نظر گرفته شد) این جایگزین نسخه دوم شد که یکماه بعد از این اتفاق افتاد و پس از آن شش پیش نویس توسط IETF انتشار یافت و در نهایت منجر به ارائه HTML 2.0 در RFC1866 گردید.

نوامبر ۱۹۹۳[ویرایش]

HTML+ توسط IETF انتشار یافت که یک پیش نویس اینترنتی بود و رقیب پیش نویس زبان ساختاری Hyper textگردید. در می ۱۹۹۴ این نسخه منقضی گردید.

آوریل ۱۹۹۵[ویرایش]

(تا مارس ۱۹۹۵ نسخه‌های نهایی آن ارائه شد): HTML3.0 را می‌توان یک استاندارد برای IETF در نظر گرفت ولی پیش نویس آن ۵ ماه بعد بدون هیچگونه اقدامی منقضی گردید. این شامل ظرفیت‌هایی بود که در پیش نویس +Raggett’s HTML دیده شده و برای پشتیبانی جداول و متون در اطراف تصاویر به کار گرفته شد و می‌توانست که فرمول‌های ریاضی پیچیده را نمایش دهد. W3C برای جستجوگر Arena پیشرفت کرد و به عنوان یک بستر آزمایشی برای HTML3 و صفحات آبشاری شکل استفاده شد ولی HTML3.0 به دلایل مختلف موفق نبود. این پیش نویس بسیار بزرگ بود و ۱۵۰ صفحه در آن دیده شد و تعدادی از اجزای جالب به آن اضافه شد و منابع IETF در خارج آن قرار گرفت. ارائه کنندگان جستجوگر شامل Netscape ,Microsoft در همین زمان زیر مجموعه‌های مختلفی از HTML3 را انتخاب کردند تا اینکه پیشرفت‌هایی در آن ایجاد شود. این پیشرفت‌ها برای کنترل جنبه‌های مختلف در نظر گرفته شد که رنگ متن، بافت پیش تصویر، اندازهٔ فونت و شکل فونت در خارج از محدود ی زمانی قرار می‌گرفت و این می‌توانست نشان دهد که چگونه این بخش سازماندهی شده است. Dave Raggett برای چندین سال از W3C استفاده کرده بود که یک مثال مطلوب برای این منظور بود. مطمئناً مایکروسافت براساس صفحات وب ساخته شده بود و از ویژگی‌های HTML انتخاب شده بود.

ژانویه ۲۰۰۸[ویرایش]

HTML5 به عنوان پیش نویس کاری توسط W3C انتشار یافت ولی syntax یک HTML5 , SGML را ارائه کرد که تلاش کرده بود که از SGML استفاده کند و HTML5 تلاش‌های مختلفی را برای SGML انجام داد و آنرا سری “html” تعریف نمود که به سری سازی XML- مبتنی بر XHTML5 جایگزین منجر شد.

می ۲۰۱۱[ویرایش]

در ۱۴ فوریه ۲۰۱۱، W3C ویژگی گروه کاری HTML را پیشرفت داد و یک ساختار مشخص برای HTML5 ارائه کرد. در می ۲۰۱۱ گروه کاری HTML5 پیشرفته را ارائه کرد که آخرین مورد بود و به دنبال آن بود که W3C خارجی را ارائه کند تا اینکه این ویژگی را به خوبی تعریف نماید. W3C آزمون جامعی را توسعه داد که در آن ویژگی‌های کامل به آن تا ۲۰۱۴ اضافه شد و اکنون این تاریخ هدفی برای توصیه‌ها شده بود.

نسخه‌های XHTML[ویرایش]

نوشتار اصلی: اکس‌اچ‌تی‌ام‌ال

XHTML یک زبان جداگانه است که به شکل فرمول بندی دوباره HTML 4.01 خود را نشان می‌دهد و از XML1.0 استفاده نموده است. اما به عنوان یک استاندارد جداگانه نمی‌توان از آن نام برد.

XHTML 1.0 در ۲۶ ژانویه ۲۰۰۰ انتشار یافت که به عنوان توصیهٔ W3C از آن نام بده شد و پس از آن دوباره اصلاح شد و انتشار دوبارهٔ آن در اول آگوست ۲۰۰۲ بود که در آن از سه نسخهٔ یکسان به عنوان HTML 4.0 و ۴٫۰۱ استفاده شد و فرمول بندی دوبارهٔ آن در XML بامحدودیت‌های خاص در نظر گرفته شد.
XHTML 1.1 در ۳۱ می ۲۰۰۱ انتشار یافت که توصیهٔ W3C محسوب شد. مبنای آن XHTML 1.0 بود ولی تغییرات اندکی در آن اعمال شده بود و فرمول بندی آن از ساختارهای تعدیل شده XHTML استفاده کرده بود که در ۱۰ آوریل ۲۰۰۱ انتشار یافته بود و توصیه W3C محسوب می‌گردید.
XHTML 2.0 یک نسخه پیش نویس کاری بود ولی در ۲۰۰۹ انتشار یافت که برای کارکرد مطلوب HTML5, XHTML5 بود. XHTML2.0 ناسازگاری‌هایی با XHTML1.X داشت و در نتیجه به شکل زبان جدید XHTML در امد تا اینکه به روزرسانی آن تا XHTML 1.X صورت گیرد
XHTML Syntaxرا می‌توان به عنوان XHTML5.1 دانست که بر اساس آن HTML5 در پیش نویس HTML5 تعریف شده بود.