بایگانی برچسب: s

استفاده از اسمبلر MASM روی لینوکس

اگر شما هم هم رشته من باشید و زبان ماشین برداشته باشید، به احتمال بسیار بسیار بالا استاد این درس، کدهایی بهتون میده که با MASM اسمبل میشن، و طبیعتا شما ناراحت خواهید شد که چرا این اسمبلر نسخه لینوکسی نداره و … 😀 . و جالبه بدونید راهی که توی این پست به شما ارائه میکنم، نه تنها برای لینوکس و سیستم عاملهای غیر از ویندوز، بلکه روی ویندوز ۶۴ بیتی هم باید اجرا بشه.

اولین چیزی که نیاز دارید، این هست که یک ایمولاتور برای شبیه سازی محیط سیستم عامل قدیمی DOS تهیه کنید. برای ویندوز و لینوکس و BSD ها و … ، نرم افزاری ارائه شده به اسم DOSBox که محیط داس رو شبیه سازی میکنه. توی اوبونتو/دبین با این دستور نصب میشه :

کد   
sudo apt-get install dosbox

سپس، شما نیاز به دانلود اسمبلر MASM دارید که میتونید از اینجا دانلودش کنید.

پس از دانلود MASM و خارج کردن اون از حالت فشرده، حالا نیازمند اجرای داس باکس و سوار کردن پوشه MASM هستید. برای این کار ، داس باکس رو اجرا کنید، و دستورات زیر رو درون شل داس تایپ کنید :

کد   
mount f ~/masm
f:

دستور mount پوشه ای که آدرسش را به عنوان ورودی دریافت کرده را درون یک درایو مجازی به نام F سوار میکند و با دستور بعدی، به آن درایو مجازی میرویم. (توجه کنید که پوشه MASM در پوشه خانگی قرار داده شده است. چنانچه در آدرس دیگری قرار داده اید باید مسیر را عوض کنید)

حالا میتوانید با اجرای MASM.EXE یا ML.EXE ، کدی که به زبان اسمبلی نوشته اید را اسمبل کنید.

موفق باشید 🙂

 

Share

رویای کریستالی برنامه نویسانه

خب، اول از همه بگم که نمیدونستم چه عنوانی رو باید انتخاب میکردم، و طبق فرمول «احمقانه ترین ایده ممکن» این عنوان رو روی پست گذاشتم. بگذریم، توی این پست میخوام یه پدیده جدید و خیلی خوب رو معرفی کنم. میدونید که من مدت زیادی هست که روبی کار شدم ( و حتی پایگاهی برای توسعه دهندگان روبی ایجاد کردم)  روبی زبان خیلی خوبیه ولی خب قاعدتا نمیشه به نیتیو کد تبدیلش کرد. همونطور که پایتون و … نمیشه نیتیو کد کامپایل کرد. اما با یه چیزی رو به رو شدم که دقیقا خود روبی بود، ولی نیتیو کد میشد. من که بهش سلام کردم، شما هم بهش سلام کنید. زبان برنامه نویسی کریستال یک زبان ruby – inspired هست که کاملا کامپایلری عمل میکنه. سینتکس کاملا سینتکس روبی هست و از این بابت خیالتون راحت باشه که اگر روبی بلدید، یاد گیری این زبان براتون چند دقیقه بیشتر زمان نخواهد برد. اجازه بدید چند مثال رو بررسی کنیم.

برنامه Hello World

کد   
puts "Hello, World"

 

چقدر فرق با روبی حس کردید؟ درسته! هیچ فرقی با روبی نداره. مثالهای بعدی هم هیچ فرقی ندارند.

برنامه شرطی (چک کردن سن قانونی)

کد   
if age >= 18
 puts "Legal"
else 
 puts "Not Legal"
end

 

استفاده از حلقه (برنامه چاپ اعداد ۰ تا ۱۰)

کد   
n = 0
while n <= 10
 puts n
 n += 1
end

 

برنامه شیء گرا (نوشتن کلاس Greeter )

کد   
class Greeter
 def initialize(name)
  @name = name
 end
 
 def say_hi
  puts "Hello, I am #{@name}"
 end
end

 

کد ها رو دیدید؟ خیلی خوب! اگر دوست دارید که این ها رو به نیتیو کد تبدیل کنید همین الان به وبسایت کریستال (که ابتدای پست لینک دادم) مراجعه کنید و شروع به خوندن داکیومنت هاش کنید. مطمئنا کوچکترین تفاوتی در ظاهر با روبی نداره و از این جهت، روبیست ها میتونن به سادگی یادش بگیرند.

Share

نوشتن یک Data Parser ساده

چندین پست قبل، در مورد نوشتن یک زبان برنامه سازی ، مطلبی نوشته بودم. در این مطلب قصد داریم یکی از بخشهای مهم هر زبان یعنی Parser رو بررسی کنیم. اگر یک جست و جوی ساده در اینترنت انجام دهید، حتما خواهید دید که اکثر آموزشهای ساخت زبان برنامه سازی، عملیات parse کردن داده رو با parser generator های موجود مثل bison و … انجام دادن. اما چرا اون رو خودمون ننویسیم؟

برای نوشتن یک Parser ساده تنها نیاز داریم به این که از Regex ها استفاده کنیم. البته، چیزی که در این مطلب نوشته میشه به هیچ وجه شما رو برنامه نویس نمی‌کنه، فقط ممکنه راه رو برای برنامه نویس شدن شما باز کنه.

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

کد   
(+ 1 2)

خب ساختار پرانتز مبنا، باعث میشه کار ما برای بازسازی عملیات های ساده در این زبان ها، بسیار بسیار ساده تر بشه. بیایم اول ببینیم که دیتا پارسر ما باید چه کنه؟

  1. باید این خط از برنامه بهش داده بشه
  2. باید اون رو تجزیه تحلیل کنه و انواع داده ای رو جدا کنه
  3. عملگر رو تشخیص بده
  4. عملیات رو انجام بده و خروجی مناسب رو بگردونه

خب، ما میخوایم نوع داده ایمون عدد باشه، حرف باشه، و بعد از اولین پرانتز، عملگر تعریف شه.

برای این کار، ابتدا دستورات زیر رو در نظر میگیریم :

کد   
( + 1 2 )
( display 'Hello')

خب، الان باید یه تابع کوچولو بنویسیم که نوع داده ای رو بهمون نشون بده. این تابع رو من توی روبی مینویسم و به این شکل در میاد :

کد   
def parse(str)
 str = str.split(' ')
 str[1] = str[1].to_sym
 for i in str
  if /[a-zA-Z]/ === i
   puts "#{i} is STRING"
  elsif /[0-9]/ === i
   puts "#{i} is NUMBER"
  elsif /[:a-z\+\-]/ === i
   puts "#{i} is OPERATOR"
  else
   puts "#{i} is not defined}
  end
end
end

ابتدا، تمام اعضای یک رشته که با فاصله از هم قرار گرفته اند را جدا کردیم (در واقع فاصله ای که در قطعه کد Scheme قرار داده شده، برای Parser ما مهم است) ، سپس با یک دستور شرطی نوع آن را بررسی کردیم. عضو شماره ۱ هر آرایه هم به یک Symbol تبدیل شده است (بعدها سمبل ها را بعنوان اوپراتور ها استفاده خواهیم نمود). بیاید این تابع را اجرا کنیم. آن هم با دو دستور داده شده.

نتیجه به این شکل خواهد بود :

Screenshot from 2015-08-21 19:16:40

همانگونه که شاهدید، پرانتز هارا نمیشناسد، display را هم به عنوان اوپراتور قبول ندارد، حال باید چه کرد؟ برای پرانتز ها باید دو شرط دیگر اضافه کنیم. پس برنامه ما به این شکل خواهد بود :

کد   
def parse(str)
 str = str.split(' ')
 str[1] = str[1].to_sym
 for i in str
  if /[a-zA-Z]/ === i
   puts "#{i} is STRING"
  elsif /[0-9]/ === i
   puts "#{i} is NUMBER"
  elsif /:[a-z\+\-]/ === i
   puts "#{i} is OPERATOR"
  elsif /\(/ === i
   puts "#{i} is LPAREN"
  elsif /\)/ === i 
   puts "#{i} is RPAREN"
  else
   puts "#{i} is not defined
  end
end
end

خب، کد جدید را تست میکنیم وبا تست کد جدید، شما شاهد نتیجه درست خواهید بود.

در این مطلب قصد آن بود که شما ببینید چگونه میتوان فهمید که زبان Lisp ، بررسی میکند که یک داده از چه نوعی است. برای پردازش دستورات درون یک repl هم کافیست تا با یک حلقه بی نهایت، دستوری مشابه دستور زیر بنویسید :

کد   
while true
 print "Lisp > "
 cmd = gets.chomp
 parse(cmd)
end

تبریک، شما یک دیتا پارسر نوشته اید. در مراحل بعدی، سعی میکنم تا توضیح دهم چگونه یک Lisp یا Scheme کوچک درست کنیم.

 

Share

به بهانه سه سالگی!

امروز وقتی داشتم هاست و دامنه رو تمدید میکردم، به تاریخ اولین فاکتور نگاه کردم، مرداد ماه ۹۱ اولین فاکتور بود و چهارمین فاکتور رو در چهارمین سال فعالیتم در وبلاگ نویسی، پرداخت کردم. با خودم گفتم چقدر سریع گذشت! حالا نمیخوام وارد ناله ها و بحث های فلسفی و خسته کنندگی همیشگی بشم. بیاید به وبلاگ، یه طور دیگه تبریک بگیم! تاحالا فکر کردید چرا اولین رشته ای که در یادگیری برنامه نویسی چاپ میکنید Happy Birthday نیست؟ خب بیاید این رو امروز چاپ کنیم! چندین زبان متفاوت از زبان هایی که قبلا در موردش بحث کردیم، امروز سوژه پستمونن. زبان هایی که مدت زیادی سراغشون نرفته بودم، یا تازه باهاشون آشنا شدم. این هم میتونه بهانه خوبی باشه برای کمی کد زدن 🙂

۱. Lua

کد   
print('Happy Birthday!')

۲. Scheme

کد   
(display "Happy Birthday!")

۳. Erlang

کد   
io:fwrite("Happy Birthday").

۴. Javascript

کد   
alert("Happy Birthday");

۵. bash

کد   
echo "Happy Birthday"

بله و این هم زبان های جا افتاده و یا زبانهایی که برام نا آشنا بودن و تازه باهاشون آشنا شدم (البته فقط Scheme چنین حالتی رو برام داشت). توی این سه سال کلی بحث و مطلب و … از این بلاگ اومد بیرون، در کنارش، مدت نسبتا زیادی که به لطف مبین نت دوست داشتنی، نت درست و حسابی نداشتم، وبلاگ رول توییتر من رو هم داشت 😀 . حالا همه چیز رو به جای خود دارم استفاده میکنم، وبلاگ و توییتر و فیسبوک و … . یه سری کارها هم بود که قرار بود بعد از «کنکور» انجام بدم، خب الانم بعد کنکوره (تا زمانی که دوباره بخوام کنکور بدم برای ارشد 😀 ) و خب وقت زیاده برای انجامشون. چیزایی مثل پادکست و ویدئو کست و … . و در آخر هم تشکر میکنم از همه کسایی که این وبلاگ رو توی این ۳ سال، دنبال کردن و خوندن 🙂

 

Share

مقدمه ای بر پرل

در پست قبلی سعی کردم تا حدودی با پرل، آشناتون کنم. در این پست هم قصد دارم تا حدودی بیسیک های پرل رو بررسی کنم. همونطور که در پست قبلی اشاره کردم، پرل شباهت بسیار زیادی به C داره، البته این شباهت به php بیشتره تا C ، ولی خب معمولا بیان میشه که پرل سینتکس مشابه C داره. شما چه C بدونید و چه php ، کد زدن با پرل براتون بسیار راحت میشه. خب، بذارید از اول اول شروع کنیم، یعنی نصب و راه اندازی پرل روی یه سیستم لینوکسی، باید بگم که پرل معمولا روی توزیع های آماده (مثل اوبونتو) نصب شده، چرا که بخش عظیمی از کانفیگ فایلها، توسط اسکریپت های پرل انجام میشه. ولی روی توزیع هایی که آماده نیستند (مثل آرچ، جنتو و …) معمولا نصب نیست (ولی با نصب X نصب میشه و خیالتون از این بابت راحت باشه). حالا که خیالتون راحت شد که پرل رو دارید ( 😀 ) ، بیاید مثل دو پست قبلی، به دنیا سلام کنید. برای این کار، یه فایل به اسم hello.pl ایجاد کنید و داخلش بنویسید :

کد   
print "Hello, World!\n";

خب حالا بخوایم این کد رو آنالیز کنیم، print که مشخصه کارش چیه، یک رشته متنی رو چاپ میکنه که روبروش هم ما از ” استفاده کردیم، و یک متن نوشتیم. اون کرکتر بک اسلش هم یک خط جدید برامون ایجاد میکنه. اما میشه این رو طور دیگه هم نوشت. در واقع میتونید متن Hello, World رو درون یک متغیر بریزید و متغیر رو چاپ کنید!

کد   
$hello = "Hello, World";
 
print "$hello\n";

خب، از این کد میشه به شباهت زیاد پرل با php هم پی برد، پرل هرچیزی که با $ شروع بشه رو خودکار متغیر در نظر میگیره. خب انواع متغیر در پرل مثل سایر زبان ها، به عدد صحیح و ممیز شناور و … تقسیم میشه . در واقع در کد زیر مشخص میشه که این کد ها چی هستند :

کد   
$int = 1;
$float = 3.14;
$char = 'a';
$string = 'Hello, World';

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

Share

قطعه کد «سلام دنیا» در زبان های مورد علاقه من

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

۱. C .

میشه گفت، کیه که C رو نشناسه؟ در واقع یکی از زبانهایی که لازمه هرکسی تا حدودی بدوندش و باهاش کد بزنه. و این زبان بخاطر ذاتش، که سازندگی هست (تقریبا ۹۰٪ سیستم عاملهای موجود با C نوشته شدند).

کد   
#include <stdio.h>
 
int main(){
 puts("Hello, World!");
 return 0;
}

۲. ++C

خب اگر دقیقا از کتابخانه stdio استفاده کنید، هیچ فرقی با C نخواهد داشت. بنابراین از این کد می گذریم 🙂

۳. Java

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

کد   
system.out.println("Hello, World!");

۴. Go

خب این زبان هم که یک زبان جدید و توسعه یافته توسط گوگل هست، شباهت بسیاری به C داره. اگر کمی وارد این زبان بشید، متوجه منظورم خواهید شد!

کد   
package main
import "fmt"
 
func main(){
 fmt.Println("Hello, World!")
 }

۵. Lisp

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

کد   
(print "Hello, World")

۶. Haskell

این زبان هم مدتها یکی از زبان های مورد علاقم بود. گرچه یه سری ایرادات نسبتا بزرگی داره، ولی خب برای درک الگوریتم یکی از بهترین هاست.

کد   
putStrLn("Hello, World!")

۷. Coffee Script

خب، در زمونه ای که حتی با جاوااسکریپت کامپایلر C می نویسن، بد نیست خودش یا یکی از فک و فامیلاش رو بلد باشیم! Coffee Script هم یکی دیگر از زبان های مورد علاقه من هست که یادش گرفتم و ازش استفاده میکنم.

کد   
console.log "Hello, World!"

۸. Ruby

خب حتما همه میدونید که این زبان، زبانی هست که خیلی کارها توش/براش کردم. از نوشتن کتاب راهنما گرفته تا نوشتن بات تلگرام ! به نظرم که اگر برنامه نویس با زبانش کنار بیاد، مشکلی نخواهد داشت در فان ساختن با زبان 🙂

کد   
puts "Hello, World!"

۹. Perl

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

کد   
print "Hello,World!\n";

۱۰. php

زبان مورد علاقه من در زمینه وب!

کد   
<?php
 echo "Hello, World!\n";
?>

۱۱ . Python

این زبان، تا حدودی مورد علاقم هست البته نسخه ۲ش. قدرتش هم تقریبا در همه زمینه ها، به اثبات رسیده

کد   
print 'Hello, World!'

 

خب، امیدوارم از این پستم خوشتون اومده باشه 🙂

Share

شروع ساخت یک زبان برنامه نویسی ساده

گرچه قبلا سعی کردم چنین کاری کنم و حتی نسخه قدیمی WENT رو هم نوشتم، ولی کار بهینه نبود، و تصمیم گرفتم همون WENT رو بازنویسی کنم. پس تصمیم گرفتم کمی بیشتر در اعماق روبی سفر کنم و با کشفیات جدید، دوباره زبانم رو بنویسم. توی این مطلب خیلی بحث رو کش نمیدم، فقط یکم در مورد این که زبان اون پشت چی کار میکنه توضیح میدم و بعد یک تکه کد ساده میزنم.

هر زبانی، اون پشت توی مفسر یا کامپایلر، بخشی داره که هرچی که بهش دادیم رو میخونه. اصولا این بخش Parser نامیده میشه و هرچی توی یک خط برنامه هست رو میخونه، به یک تابع میفرسته و بعد عملیات رو روش انجام میده. برای مثال عبارت ۲ + ۲ رو در نظر بگیرید، این عبارت از ۳ کاراکتر تشکیل شده، ۲ و ۲ و +. این رو که به مفسر بدید، میفهمه که باید ۲ و ۲ با هم جمع شن و جواب بشه ۴ (یا شایدم ۵ 😀 ). ولی این کار چطوری توی مفسر اتفاق میفته؟ کد زیر توی روبی بهتون میگه :

کد   
a = "2 + 2"
a = a.split(' ')
sum = 0
for i in a
  sum += i.to_i
end
 
puts sum

توجه کنید که این کد بسیار کوتاه شده و اصولا منطق زبان درش رعایت نشده. ولی خب برای توضیح، کار راه اندازه. در خط اول، رشته ۲+۲ رو توی متغیر a ریختیم و بعدش توی یک آرایه قرارشون دادیم. دقت کنید که اینجا فاصله بسیار اهمیت داره ! چرا که جداسازی درون آرایه کاملا به فواصل وابستس. بعد از اون، اومدم یه متغیر ایجاد کردم به اسم sum و مقدارش رو صفر قرار دادم. بعد توی یک حلقه، تمام اعضای آرایه رو به عدد صحیح تبدیل کردم و بعد ریختم توی sum . به این شکل، عملیات جمع رو به زبان برنامه سازی فهموندیم. حالا برای بهتر شدن زبان، باید کلاس و تابع و … بنویسیم. وقتی نسخه جدید WENT رو نوشتم سعی میکنم اینجا در موردش یک مطلب کوتاه بنویسم.

موفق باشید 🙂

Share

مقدمه ای بر شی گرایی در ++C

پس از مدتها دوباره تصمبم گرفتم دست به نوشتن در این وبلاگ ببرم، و گفتم چه بهتر که مطالب آموزشی و مفید بنویسم. الان مدتیه خودم هم با شی گرایی درگیرم، و گفتم چه بهتر که در مورد شی گرایی در ++C بنویسم. اول از همه، بگم که ++C واقعا زبان خوبیه و بهتره اگر میخواید شی گرایی رو از پایه یاد بگیرید، وارد این زبان بشید و بعدش سراغ جاوا یا هر زبان دیگری برید.

خب، در این مطلب صرفا ساخت کلاس و ایجاد یک شیء توسط کلاس رو بررسی خواهم کرد. باقی مفاهیم شیء گرایی رو هم خرد خرد در ادامه، در وبلاگ قرار خواهم داد.

ساخت کلاس

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

کد   
class CLASSNAME {
 	....
 };

درون بدنه کلاس، میتونیم متغیرهای مربوط به کلاس، و متدها رو تعریف کنیم. که اونها هم سه نوع public و private و protected دارن. نوع public نوعیه که همه بهش دسترسی دارن. نوع private نوعی هست که فقط خود کلاس (و دوستانش! که بعدا مفهومشون رو توضیح خواهم داد) بهش دسترسی داره و نوع protected هم نوعیه که فقط و فقط خود کلاسمون بهشون دسترسی داره. هرچیزی که توی کلاس تعریف کنیم، پیشفرض private در نظر گرفته میشه. و خودمون میتونیم مشخص کنیم که private یا public یا protected باشن.

خب، فرض کنید الان میخوایم کلاسی بسازیم به اسم student و نیازه که اسم، فامیل و شمار دانشجویی واردش بشه. خیلی ساده کدش رو مینویسیم :

کد   
class Student {
	public:
	int number;
	string name;
	string lastname;
};

این کلاس، یک کلاس کامل به شمار میره. تنها چیزی که الان نیاز داریم، یک متد هست که این اطلاعات رو چاپ کنه! پس باید یک تابع درون کلاسمون تعریف کنیم تا این کار رو برامون انجام بده!

یعنی کلاس ما و متدش به این شکل تعریف میشن :

کد   
class Student {
	public:
	int number;
	string name;
	string lastname;
	void PrintInfo();
};
 
void Student::PrintInfo() {
	cout<<"Name: "<<student.name<<endl;
	cout<<"Last name: "<<student.lastname<<endl;
	cout<<"Number: "<<student.number<<endl;
}

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

ساخت یک شیء

یادتان نرود که با تعریف کلاس ها، در واقع یک variable type جدید ساختید. پس تعریف یک شیء بسیار آسان است! چرا که صرفا کافیست اسم کلاس + اسم متغیر را نوشته و بعد برنامه را اجرا کنیم!

برنامه ما به این شکل در میاد آخر سر :

کد   
#include <iostream>
#include <string.h>
using namespace std;
class Student {
public:
int number;
string name;
string lastname;
void PrintInfo(void);
};
void Student::PrintInfo(void) {
cout<<"Name: "<<name<<endl;
cout<<"Last name: "<<lastname<<endl;
cout<<"Number: "<<number<<endl;
}
int main(){
Student s1;
s1.name = "Muhammadreza";
s1.lastname = "Haghiri";
s1.number = 12;
s1.PrintInfo();
return 0;
}

 

همونطور که می بینید، شیء s1 بلافاصله بعد از کلاس مربوطه، تولید شده. و بعد هم ویژگی های مربوطه اضافه شدند و بعدش هم متد مربوطه رو فراخوانی کردیم.

به همین سادگی!

تا آموزش بعدی، بدرود!

Share

لقمه را دور سر نچرخانیم – برعکس کردن یک رشته در سی شارپ

با سلام و عرض ادب خدمت خوانندگان وبلاگ. در این پست قصد دارم یکم سی شارپ رو بررسی کنم. سی شارپ، یکی از دلایل محبوب شدنش، اینه که سینتکس نسبتا ساده ای داره، ولی همین رو هم میشه پیچوند 🙂 .

مثلا این سوال رو در نظر بگیرید :

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

اگر فقط بخواهیم از System استفاده کنیم و یک تابع ساده بنویسیم، کد ما میشه این :

کد   
using System;
 
namespace ReverseName
{
	class MainClass
	{
		public static void NameReverse(string name){
			for (int i = name.Length; i > 0; i--){
				Console.Write(name.Substring(i-1, 1));
			}
		}
		public static void Main (string[] args)
		{
			//Challenge Accepted!
			Console.Write ("Enter a name: ");
			string n = Console.ReadLine ();
			NameReverse (n);
		}
	}
}

(اون Challenge Accepted داستانی داره که بعدا تعریف خواهم کرد 😀 ).

خب با یکم بررسی می بینید که این کد، خروجی به صورت رشته ای نداره (دستور Console.Write) و نمیشه ازش جاهایی که لازمه، استفاده کنیم. پس بهتره به جای System از System.Linq استفاده کنیم و کد رو خلاصه کنیم :

کد   
using System;
using System.Linq; 
namespace ForEach
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			Console.Write ("Enter your name: "); 
			string name = Console.ReadLine (); 
			foreach (char c in name.Reverse()) {
				Console.Write (c);
			}
 
		}
	}
}

و اگر دقت کنید به جای اون for ، از foreach استفاده کردم که بسیار کار رو راحت تر کرده.

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

موفق باشید 🙂

Share

یک فنجان قهوه با طعم جاوا اسکریپت و روبی لطفا!

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

سلام دنیا

قطعا این کد، ساده ترین و اولین کدی هست که در هر زبان برنامه نویسی ای، یاد میگیریم. این کد در کافی اسکریپت به این شکل هست :

کد   
alert "Hello, World!"

این کد، یک پنجره پیام باز میکنه و پیام Hello World رو به کاربر نشون میده. بعد از اجرای دستور :

coffee --compile ./path/to/coffee/file

کد رو به این تبدیل میکنه :

کد   
alert("Hello, World!");

حالا قطعه کد پیچیده تری رو بررسی میکنیم.

تابع فاکتوریل

این تابع، یک تابع بازگشتی هست که عمدتا در آموزش همه زبان های برنامه نویسی، ازش استفاده میکنیم. این تابع در کافی اسکریپت به این شکل هست :

کد   
a = (x) -> 
    if(x == 0)
       return 1
    else
       return x * a(x-1)

و این کد، همین تابع در جاوااسکریپت :

کد   
var a;
 
a = function(x) {
  if (x === 0) {
    return 1;
  } else {
    return x * a(x - 1);
  }
};

اجرای دو کد، با یک عدد خاص (مثلا ۴) ، یک نتیجه رو به ما بر میگردونه، چرا که کافی صرفا یک رابط نوشته شده با روبی برای جاوااسکریپت به حساب میاد.

در این پست، سعی کردم خیلی خلاصه و مختصر و مفید، در مورد زبان کافی اسکریپت توضیح بدم. امیدوارم وقت و مشغله این اجازه رو بهم بده که بعدا بیشتر در موردش (چه در خود وبلاگ، چه در پایگاه توسعه دهندگان روبی) بنویسم.

موفق و پیروز باشید.

Share