موضوع مقاله: آیکون (زبان برنامه‌نویسی) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # آیکون (زبان برنامه‌نویسی) | مقدمه: آیکون (Icon)، یک زبان برنامه نویسی بسیار سطح بالا است که برای آسان نمودن نوشتن برنامه‌هایی با هدف کار با رشته‌ها و ساختارها، طراحی شده‌است. | ## بخش 1: آیکون (زبان برنامه‌نویسی) | Icon یک زبان بسیار سطح بالا با ویژگی اجرای هدف گرا بوده و امکانات زیادی برای پردازش رشته‌ها و الگوهای متنی دارد. درباره آیکون طراحی و پیاده‌سازی این زبان در محیطی آکادمیک و نه اقتصادی انجام شده‌است. این زبان توسط هیئت علمی، کارمندان و دانشجویان دانشگاه آریزونا، با کمک‌های مالی داوطلبانه از سراسر دنیا پیاده‌سازی شد. Icon یک زبان برنامه‌نویسی همه منظوره، با قابلیت‌های گسترده برای پردازش رشته‌ها (متن) و ساختارهای داده‌است. قابلیت چک کردن تطابق رشته‌ها را دارد که باعث دور شدن برنامه‌نویس از مشکلات ملال‌آور کار با رشته‌ها می‌شود. و اگر یک عددی، در جایی که باید رشته به کار رود استفاده شود، به صورت خودکار به رشته تبدیل می‌شود. چند پیاده‌سازی از icon قابلیت‌های سطح بالای گرافیکی، با رابط آسان کاربری وجود دارد. Icon مدیریت حافظه خودکار دارد، اشیا زمانی که به آن‌ها احتیاج هست، در طول اجرا ساخته می‌شوند. ممکن است بعضی‌ها فکر کنند که این زبان برای طراحی icon(نقشک) ساخته شده، ولی این‌طور نیست. به خصوص برای ساخت ابزارهای نرم‌افزاری برای پردازش روی متن، و برای برنامه‌های تحقیقاتی و مطالعاتی مناسب است.این زبان برای راحت‌تر ساختن برنامه‌نویسی درست شده‌است، روی ارزش زمان برنامه‌نویس و اهمیت سریع به کار افتادن برنامه توجه می‌کند. به صورت متداول این زبان برای کارهای کوتاه، کارهایی که یک بار می‌توان آن‌ها را انجام داد و انجام آن (نه کیفیت انجام) مهم است و کارهای بیش از حد پیچیده‌است. از طرف دیگر Icon از سبک پرانتزهای C برای ساخت یافته‌سازی گروه‌های اجرایی استفاده می‌کند و اجرای برنامه‌ها با رویه‌ای به نام main آغاز می‌شود. از خیلی جهات Icon همچنین خصوصیاتی شبیه به بسیاری از زبان‌های برنامه‌نویسی اسکریپتی دارد (مانند SNOBOL): الزامی برای تعریف متغیرها نیست، انواع به‌طور اتوماتیک تعیین می‌شوند، و اعداد می‌توانند به‌طور اتوماتیک به رشته‌ها تبدیل شوند و برعکس. | ## بخش 2: آیکون (زبان برنامه‌نویسی) | ویژگی دیگری که در زبان‌های اسکریپتی رایج است، اما نه در همه آنها، استفاده از کاراکتر پایان خط است، در Icon، خط‌ها با نقطه و ویرگول پایان نمی‌یابند و اگر منطقی باشد با نقطه و ویرگول ضمنی پایان می‌یابند. در این الگو، مقایسه‌های ساده مانند if a<b مانند دیگر زبان‌ها، به معنی « اگر عمل سمت راست درست ارزیابی شود » نیست، در عوض چیزی مثل « اگر عملیات سمت راست موفقیت‌آمیز باشند » معنی می‌دهد. در این حالت عملگر <موفقیت‌آمیز است اگر مقایسه درست باشد، بنابراین نتیجه نهایی نیز همین است. علاوه براین، عملگر <اگر موفقیت‌آمیز باشد، متغیر دومی را برمی گرداند، که اجازه می‌دهد چیزهایی شبیه if a<b<c، که یک شکل مقایسه رایج است و در اکثر زبان‌ها به‌طور مستقیم قابل استفاده نیست، نوشته شوند. چیزی که در مورد مثال مورد توجه‌است این است که حتی اگر read ایجاد خطا کند، کد کار خواهد کرد، مثلاً اگر فایل موجود نباشد. موفقیت و شکست در توابع به سمت بالا منتقل می‌شوند به این معنی که شکست در یک تابع تو در تو باعث می‌شود توابعی که آن را فراخوانی می‌کنند نیز با شکست روبرو شوند. while که یک ساختار کنترلی است، با شکست متوقف می‌شود، به این معنی که فایل خالی می‌باشد. همچنین بلوک‌های try در عمل یک هزینه اضافی را، حتی اگر خطایی رخ ندهد، تحمیل می‌کنند، یک هزینه توزیعی که Icon از آن اجتناب می‌کند. بنابر این مفهوم، اجرای هدف گرا در Icon به این معناست که تا زمانی که برخی اهداف محقق شوند، اجرا ادامه می‌یابد. دستور خواندن تا زمانی ادامه می‌یابد که اطلاعاتی برای خواندن موجود باشد، و وقتی اطلاعاتی نباشد، شکست می‌خورد. بنابراین در این زبان، به جای استفاده از بررسی وضعیت بازگشت‌ها یا ساختارهای مشابه، هدف مستقیماً در کد آورده می‌شود. مولدها عبارات در Icon اغلب فقط یک مقدار برمی گردانند، برای نمونه، x<5 با موفقیتی با مقدار 5 یا شکست ارزیابی خواهد شد. مولدها بسیاری از ساختارهای حلقه‌ای را، به صورت بسیار صریح تر، در این زبان هدایت می‌کنند. | ## بخش 3: آیکون (زبان برنامه‌نویسی) | برنامه‌نویس حلقه‌ای نمی‌نویسد و نیازی به مقایسه شرط نیست، Icon همه این کارها را برای او انجام می‌دهد. Icon به صورت ساختاری تمام مقادیر را از چپ به راست چک می‌کند تا اولین موفقیت رخ دهد یا لیست خالی شود و شکست را برگرداند. یادآوری می‌شود که توابع فقط تا زمانی که فراخوانی‌های شامل آن‌ها شکست نخورد، فراخوانی خواهند شد، بنابراین این مثال را می‌توان به صورت کوتاه تر، به شکل زیر نوشت : write(«y=», (x | 5)> y) یک مولد ساده دیگر to است که می‌تواند اعداد صحیح تولید کند، every write(1 to 10) دقیقاً همانگونه که نشان می‌دهد عمل خواهد کرد. البته زمانهایی هست که شما می‌خواهید عمداً رشته‌ای را بعد از نقطه‌ای از ورودی بیابید، برای نمونه، شما ممکن است بخواهید یک فایل متنی را که شامل داده‌های یک جدول متقاطع است بررسی کنید. اجرای هدفگرا در اینجا به خوبی عمل خواهد کرد و به این صورت می‌تواند مورد استفاده قرار گیرد : write(5 <find("the", s اگر "the" بعد از موقعیت 5 ظاهر شود، موقعیت برگردانده خواهد شد، در غیر این صورت مقایسه شکست خواهد خورد و مانند قبل، شکست را به write منتقل خواهد کرد. در این کد یک ترفند کوچک وجود دارد که نیاز به ملاحظه دارد : مقایسه مقدار سمت راست را برمی گرداند، بنابراین لازم است که find را در سمت راست مقایسه قرار دهیم. در این حالت عنوان تابع find در خارج از پارامترها در جلوی علامت سؤال قرار داده می‌شود. در زبان Icon چند ویژگی به آن اضافه شده‌است که کار کردن با رشته را آسان‌تر می‌کند. بیشترین چیزی که در این زبان جلب توجه می‌کند، سیستم بررسی رشته آن است که توابع را به صورت پیاپی روی رشته فراخوانی می‌کند. در این جا چند کار دیگر که با رشته‌ها می‌توان انجام داد را می‌بینید: s := "abc" s[2] := "123" "a123c"مقدار کنونی s است. ساختارهای دیگر رشته‌های Icon لیست‌های ساده‌ای از کاراکترها هستند، مانند معادل آن‌ها در C. مانند آرایه‌ها در زبان‌های دیگر، Icon اجازه می‌دهد آیتم‌ها با موقعیت شان جستجو شوند. | ## جمع‌بندی | عبارت every در واقع مقدارهای قبلی را به تابع می‌دهد، به عنوان مثال کد بالا می‌تواند به این صورت بازنویسی شود.