PDA

View Full Version : آشپزی در پرل(قسمت دوم)



white fox
چهارشنبه 18 شهریور 1383, 04:28 صبح
با سلام خدمت دوستان عزیز درس آشپزیمون رو شروع میکنیم.
========================================
همانطور که همه میدونید پاییه‌ای ترین چیزی که در هر زبان برنامه‌نویسی به اون پرداخته میشود و همه با آن سروکار دارند.. داده میباشد.
سه نوع داده در پرل وجود دارد.
۱. اسکالرها
۲. لیست‌ها و آرایه‌ها
۳. هش‌ها (hashes(

اول بریم سراغ اسکالرها.
اسکالرها واحد اصلی داده در پرل میباشد.دو نوع اسکالر داریم. اسکالرهای ثابت (Constant( و همچنین اسکالرهای متغییر که بیشتر با این نوع کار میکنیم.دو نوع داده میتوان به اسکالرها اختصاص داد یکی اعداد و دیگری رشته ها هستند.بگذارید مثالی بزنم.


$animal = "camel";
$answer = 42;

بگذارید دستورات بالا را توضیح دهم. $ این علامت به معنای معرفی یک اسکالر میباشد. یعنی هرجا شما خواستید از متغییر اسکالری استفاده کنید باید از $ استفاده کنید.
علامت = یک اپراتور است که به معنای اختصاص دادن میباشد. یعنی مقدار سمت راست را به مقدار سمت چپ اختصاص بده.
خوب و camel نیز رشته ای است که به متغییر animal اختصاص دادیم فقط اگه دقت کنید میبینید که camel بین دو علامت " قرار گرفته است.هر وقت شما بخواهید رشته ای را به متغییری اختصاص دهید از " " استفاده میکنید.
خط دوم عبارت هم مانند اولی میباشد با این تفاوت که برای اعداد از " " استفاده نمیکنیم.
خوب یک مثال بزنیم برای استفاده از اسکالرها:


#!/usr/bin/perl -w

$a=1;
$b=3;

print $a+$b; #prints 4

خوب بریم سراغ لیست ها و آرایه ها
=========================
استفاده از چند اسکالر به همراه هم لیست را تشکیل میدهد. به این صورت:

(5, "pico", $x, 3.14)

همانطور که میبینید در لیست میتوان از اعداد . رشته ها و یا متغییر های اسکالر استفاده کرد.
اگر لیست شما فقط حاوی رشته ها باشد میتوانید برای کم کردن کار و ننوشتن مداوم , بین عناصر لیست از اپراتور qw استفاده کنید به این صورت:

qw(pico vi kedit gedit notepad)
برای تشکیل لیست ها میتوان از محدوده ها استفاده کرد.به این صورت:

(1..10, 20..40)
در اینجا ما دو محدوده تعیین کردیم یکی اعداد ۱ تا ۱۰ و دیگری اعداد ۲۰ تا ۴۰.
شما عملا از لیست ها در برنامه هاییتان کم استفاده خواهید کرد و از لیست ها برای تشکیل آرایه ها استفاده میکنید. آرایه ها مانند اسکالرها حرف تعریف دارند. @ علامت تعریف آرایها میباشد.بگذارید مثالی بیاورم:

@opensource=qw(Linux freeBSD openBSD);
@empty=();
@copy=@original;

خوب ما چی داریم؟؟؟ سه تا مثال.اولی ما یک آرایه درست کردیم و در آن سه عنصر قرار دادیم. دومی یک آرایه خالی استفاده کردیم.و سومی در سومی ما عناصر داخل آرایه original را به آرایه copy اختصاص دادیم.

بیایید کمی بیشتر در مورد آرایه ها حرف بزنیم.

هر آرایه دارای دو قسمت است.۱) نام آرایه که با @ معرفی میشود و ۲) عناصر آرایه است .همان لیستی که به آرایه نسبت میدهیم. هر عنصر یک شاخص عددی دارد که با آن معرفی میگردد. شاخص ها در آرایه از صفر شروع میشود.
در واقع عنصر دوم آرایه opensource که در بالا معرفی کردیم openBSD . چرا؟ چون شاخص عناصر از صفر شروع میشود در واقع Linux دارای شاخص صفر است و freeBSD دارای شاخص یک است.

برای نشان دادن یک عنصر از عناصر یک آرایه در پرل به مانند زیر عمل میکنیم.

@animal=qw(camel llama own horse hen);

print $animal[0]; #prints camel
print $animal[3]; #prints horse
print $animal[$#animal]; #prints hen

خوب یکم توضیح بدم.
اول که ما اومدیم یک آرایه به نام animal با ۵ عنصر تشکیل دادیم.خط دوم در درل به معنای این است که عنصری با شاخص صفر را پرینت بگیر و همونطور که میدونید شاخص صفر به معنای عنصر اول است که camel پرینت گرفته میشود. خط بعدی نیز حتما متوجه شده اید و احتیاجی به توضیح ندارد‌ . فقط یک سوال پیش میاد چرا اول animal بجای @ از $ استفاده کردیم؟ مگه $ برای اسکالرها نیست؟....اشتباه نکردیم؟
نه اشتباهی نشده اگر کمی دقت کنید ما چه میخواستیم پرینت بگیریم؟ عنصر اول رو و عنصر اول یک اسکالر هست. ما که کل آرایه رو پرینت نمیخواهیم بگیریم. برای همین هست که ما از $ بجای @ استفاده کردیم.
و اما خط سوم . در اینجا ما میخواستیم عنصر آخر رو پرینت بگیریم .پرل کار ما رو آسون کرده .اگر ما ندونیم آرایمون چند عضو داره و بخواییم ببینیم که آخرین عضومان کدام است از animal#$ استفاده میکنیم.
در واقع برای دسترسی به یک عنصر خاص در یک آرایه از دستور زیر استفاده میکنیم.

$array[index];
در واقع array نام آرایه است و index شاخص آن عنصر است.
برای بدست آوردن طول یک آرایه دو راه وجود دارد. یکی پرینت گرفتن از array#$ است که به ما تعداد عناصر آن آرایه یکی کمتر را میدهد. چون اگر فراموش نکرده باشید دستور بالا شماره شاخص آخرین عنصر را میدهد و شاخص ها از صفر شروع میشوند.
راه دیگر برای بدست آوردن طول آرایه استفاده از دستور زیر است.

$size=@array;
print $size;
در این حالت شماره واقعی تعداد عناصر را بدست خواهید آورد.
استفاده از دستور زیر باعث میشود که کل عناصر یک آرایه با یک فاصله پرینت گرفته شود.

@family=qw(father mother sister brother);
print "@family"; #prints: father mother sister brother
ریزه کاری و نکات بسیار زیادی در مورد اسکالرها و آرایه ها وجود دارد که در اینجا نمیتوان به همه آنها پرداخت.فراموش نکنید این یک آموزش گام به گام نیست و فقط گزیده ایست.پس برای فهمیدن طعم های دیگر غذا خودتون باید دستبکار شوید.
در مورد هش ها بعدا جدا توضیح خواهم داد چون از این ها دردسرش بیشتر است.
در آخر یک برنامه نمونه میذارم. که خودم نوشتم و یک برنامه ساده میباشد که از اسکالرها و آرایه ها در آن استفاده شده است.
امیدوارم از درس آشپزی امروزمون لذت برده باشید. :wink:



#!/usr/bin/perl -w
######################
#Programmer: White Fox #
#E-mail: White_fox_ir@yahoo.com #
#use scalares and arrays #
######################

$num=0;
$count=0;
$count2=9;

for($i=0; $i<10; $i++) {
$adad[$count]=$num;
print "@adad\n";
$num++;
$count++;
}
for($j=0; $j<10; $j++) {
$adad[$count2]=" ";
print "@adad\n";
$count2--;
}

sunboy
چهارشنبه 18 شهریور 1383, 16:43 عصر
خیلی ممنون White Fox جان انشا ا.... همین طوری ادامه بدی :heart: :flower: :flower:

ARA
یک شنبه 09 بهمن 1384, 03:20 صبح
سلام من واقعا شگفت زده شدم :لبخند: دو نفر با این پشتکار دارن یک بخش رو اداره می کنند تو هر بحث و پست می شه اسم دو نفر رو حتما دید
White Fox و sunboy واقعا جالب بود خوب من بهتون تبریک میگم واقعا پشتکار عالی شما رو میرسونه
من تو یکی از پروژه هام کارم به این بخش افتاده:چشمک: امیدوارم بتونم در بحث هاتون شرکت کنم
و پرل رو یاد بگیرم من تا یک ساعت پیش که اینجا نیومده بودم هیچی بلد نبودم ولی همین که پستهای شما رو خوندم کلی چیز یادگرفتم
:تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق:

amir master
سه شنبه 29 فروردین 1385, 09:40 صبح
چه ربطی به آشپزی داشت ؟؟؟!!!!؟؟؟؟