پیشرفت ساخت آپادانا 2

JavidX

Apadana Developer
سلام
خب دوستان لحظاتی پیش بالاخره IF هم تمام شد و الان می شه توی برنامه این شکلی IF نوشت:
کد:
if ($str='something') {
    //some command
} else if ($str>'something') {
    //some command
} else if ($num>=5) and ($num<10) {
    //some command
} else {
    //some command
}
یه نکته هم اینکه توی آ2 وقتی دو تا رشته رو با هم با علامت های کوچکتر و بزرگتر مقایسه می کنید چیزی که برمیگردونه بر اساس حروف الفبا هست مثلا: 'امید'<'جاوید'

پیروز باشید
 

JavidX

Apadana Developer
سلام
قسمت مربوط به Private و Public کردن متغیرها تموم شد. الان دارم میرم سراغ یکی از مهمترین بخش ها توی سرعت مفسر و اونم بهینه سازی متغیرهاست. (همونی که توی چند تا پست قبل باعث کند شدن آ2 نسبت به php شده بود)
 

JavidX

Apadana Developer
دوستان بهینه سازی متغیرها هم تموم شد.
الان دیگه برای مفسر مهم نیست که تا الان چند تا متغیر تعریف کردید. با سرعت ثابت به متغیرتون دسترسی پیدا می کنه.
طی تستی که توی مفسرهای مختلف داشتم به نتایج زیر رسیدم. تست به این شکل بود که دستورات خیلی ساده ی اختصاص مقدار ثابت به 1000 متغیر با اسمهای مختلف رو 1000 بار تکرار کردم.
کد:
Java ~ 4 ms
PHP ~ 10 ms
Lua ~ 280 ms
Apadana Studio 2 ~ 390 ms
MMB ~ 16 sec
Apadana 1 ~ 23 sec
بهینه سازی به همینجا ختم نمیشه مطمئناً باز هم بهینه تر می کنم ولی با وقتی که در حال حاضر داریم نمیشه بهتر از اینش کرد. Autoplay Media Studio اومده کار خودش رو راحت کرده و از Lua استفاده کرده.

حالا تست قبلی رو با بهینه سازی بیشتر مجدداً انجام دادم و نتایج خوبی هم گرفتم: (به این پست مراجعه کنید) - ضمناً به اضافه شدن Lua به لیست هم توجه کنید.
کد:
Java ~ 1 ms
PHP ~ 150 ms
Lua ~ 540 ms
Apadana Studio 2 ~ 609 ms
MMB ~ 14 sec
Apadana 1 ~ 27 sec
دقت کنید که آ2 با Lua توی این مورد رقابت نزدیکی داره.

موفق و پیروز باشید
 
آخرین ویرایش:

Hamparvaz

Member
سلام و خسته نباشيد
خواستم بگم اگه ممكنه چند تصوير جديد از محيط اپادانا برامون بزاريد
 

JavidX

Apadana Developer
سلام و خسته نباشيد
خواستم بگم اگه ممكنه چند تصوير جديد از محيط اپادانا برامون بزاريد
سلام
تصویرها که همون تصویرهای قبلی هستند! الان دارم رو پلیر کار می کنم واسه همین دیزاینر پیشرفتی نکرده که عکس ببینید!
 

JavidX

Apadana Developer
خب پردازش رشته ها هم تموم شد. دو مثال رو ببینید:

کد:
$Name = 'Javid'
$LastName = 'Shoaei'
$Str="My name is ""$name $LASTNAME""![NextLine]Cool, huh?"

Result:
My name is "Javid Shoaei"!
Cool, huh?

کد:
$Name = 'Javid'
$LastName = 'Shoaei'
$Str='My name is ''$name $LASTNAME''!

Result:
My name is '$name $LASTNAME'!

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

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

the_king

مدیرکل انجمن
خب پردازش رشته ها هم تموم شد. دو مثال رو ببینید:

کد:
$Name = 'Javid'
$LastName = 'Shoaei'
$Str="My name is ""$name $LASTNAME""![NextLine]Cool, huh?"

Result:
My name is "Javid Shoaei"!
Cool, huh?

کد:
$Name = 'Javid'
$LastName = 'Shoaei'
$Str='My name is ''$name $LASTNAME''!

Result:
My name is '$name $LASTNAME'!

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

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

یه انتقاد بکنم؟ منطقی که بکار برید برنامه نویس رو گیج می کنه، دو کاراکتر پی در پی ' رو بکار می برید تا در رشته ای که با همین کاراکتر شروع و پایانش مشخص شده یک کاراکتر ' ثبت بشه،
که هم مرسوم ئه و هم منطقی، اما از اون طرف دو کاراکتر پی در پی " رو بکار می برید تا در رشته ای که با همین کاراکتر شروع و پایانش مشخص شده هم نقش یک کاراکتر " رو ایفا کنه و
هم نیاز به وجود یک تکرار مجدد "" هست زیرا تفسیر رشته میان ایندو باید انجام بشه. در ضمن برنامه نویس برای استفاده از این قابلیت که قراره وارد کردن متغیر بین رشته رو ساده کنه
انعطاف پذیری کمی داره، همیشه رشته هایی رو دریافت می کنه که داخل شون " هست. احتمالا برای درج کاراکتر های [ و ] در رشته هم از [[ و ]] استفاده میشه.
در رشته هایی که ازشون مثال زدید حداقل [ و ] و ' و " و $ کاراکتر کنترلی حساب می شوند و درج دو کاراکتر پی در پی شون تفسیر متفاوتی داره.

قابلیت درج ساده متغیر یا عبارت بین رشته ای مفیده اما بهتره که از تعدد قواعد و کاراکتر های کنترلی پرهیز بشه. فرضا :
کد:
$Name = 'Javid'
$LastName = 'Shoaei'
$Str="My name is [$name] [$LASTNAME]![NextLine]Cool, huh?"

Result:
My name is Javid Shoaei!
Cool, huh?

کد:
$Str="My name is ""[$name] [$LASTNAME]""!"

Result:
My name is "Javid Shoaei"!

کد:
$Str="[[NextLine]] [$$name] = [$name]"

Result:
[NextLine] $name = Javid

کد:
$Str="My 'FirstName' is '[$name]'"

Result:
My 'FirstName' is 'Javid'

کد:
$Str='My name is [$name] [$LASTNAME]![NextLine]Cool, huh?'

Result:
My name is [$name] [$LASTNAME]![NextLine]Cool, huh?

کد:
$Str='My ''FirstName'' is ''[$name]'''

Result:
My 'FirstName' is '[$name]'

کد:
$Str='My "FirstName" is "[$name]"'

Result:
My "FirstName" is "[$name]"
 

JavidX

Apadana Developer
یه انتقاد بکنم؟ منطقی که بکار برید برنامه نویس رو گیج می کنه، دو کاراکتر پی در پی ' رو بکار می برید تا در رشته ای که با همین کاراکتر شروع و پایانش مشخص شده یک کاراکتر ' ثبت بشه،
که هم مرسوم ئه و هم منطقی، اما از اون طرف دو کاراکتر پی در پی " رو بکار می برید تا در رشته ای که با همین کاراکتر شروع و پایانش مشخص شده هم نقش یک کاراکتر " رو ایفا کنه و
هم نیاز به وجود یک تکرار مجدد "" هست زیرا تفسیر رشته میان ایندو باید انجام بشه. در ضمن برنامه نویس برای استفاده از این قابلیت که قراره وارد کردن متغیر بین رشته رو ساده کنه
انعطاف پذیری کمی داره، همیشه رشته هایی رو دریافت می کنه که داخل شون " هست. احتمالا برای درج کاراکتر های [ و ] در رشته هم از [[ و ]] استفاده میشه.
در رشته هایی که ازشون مثال زدید حداقل [ و ] و ' و " و $ کاراکتر کنترلی حساب می شوند و درج دو کاراکتر پی در پی شون تفسیر متفاوتی داره.

قابلیت درج ساده متغیر یا عبارت بین رشته ای مفیده اما بهتره که از تعدد قواعد و کاراکتر های کنترلی پرهیز بشه. فرضا :
کد:
$Name = 'Javid'
$LastName = 'Shoaei'
$Str="My name is [$name] [$LASTNAME]![NextLine]Cool, huh?"

Result:
My name is Javid Shoaei!
Cool, huh?

کد:
$Str="My name is ""[$name] [$LASTNAME]""!"

Result:
My name is "Javid Shoaei"!

کد:
$Str="[[NextLine]] [$$name] = [$name]"

Result:
[NextLine] $name = Javid

کد:
$Str="My 'FirstName' is '[$name]'"

Result:
My 'FirstName' is 'Javid'

کد:
$Str='My name is [$name] [$LASTNAME]![NextLine]Cool, huh?'

Result:
My name is [$name] [$LASTNAME]![NextLine]Cool, huh?

کد:
$Str='My ''FirstName'' is ''[$name]'''

Result:
My 'FirstName' is '[$name]'

کد:
$Str='My "FirstName" is "[$name]"'

Result:
My "FirstName" is "[$name]"
ممنون بخاطر انتقادتون. فقط من درست مشکل رو متوجه نشدم. مثال هایی که زدید قوائد فعلی هستند با یک تفاوت که اونم گذاشتن براکت دور نام متغیر هست یعنی:
کد:
[$name]
شما پیشنهادتون برای استفاده از " و ' هر کدوم توی بلاک های خودشون چیه؟ من این کار رو کردم بخاطر این که از استفاده ی بک اسلش برای کاراکترهای خاص و این چیزها که گیج کننده هستند جلوگیری کنم. به همین دلیل تکرار به نظرم ساده تر اومد. حدستون راجع به [[...]] درسته. حالا اگه ممکنه لطف کنید یه مقدار واضح تر مشکل رو بگین که متوجه بشم دقیقا منظورتون چیه.

با تشکر
 

the_king

مدیرکل انجمن
ممنون بخاطر انتقادتون. فقط من درست مشکل رو متوجه نشدم. مثال هایی که زدید قوائد فعلی هستند با یک تفاوت که اونم گذاشتن براکت دور نام متغیر هست یعنی:
کد:
[$name]
شما پیشنهادتون برای استفاده از " و ' هر کدوم توی بلاک های خودشون چیه؟ من این کار رو کردم بخاطر این که از استفاده ی بک اسلش برای کاراکترهای خاص و این چیزها که گیج کننده هستند جلوگیری کنم. به همین دلیل تکرار به نظرم ساده تر اومد. حدستون راجع به [[...]] درسته. حالا اگه ممکنه لطف کنید یه مقدار واضح تر مشکل رو بگین که متوجه بشم دقیقا منظورتون چیه.

با تشکر
تکرار کاراکتر هم ساده است و مناسب، من انتقاد ام تعدد کاراکتر های کنترلی است که موقع تفسیر رشته بین دو تا " بکار می برید، " و [ ] و $ هر سه گروه شون مستقل از هم
کاراکتر کنترلی اند. چون کل رشته رو برای تفسیر پردازش می کنید این مستقل بودن کاراکتر های کنترلی دردسر ئه، تفسیر عبارت زیر رو در نظر بگیرید :
کد:
$a = 'x'
$ab = 'xy'
$abc = 'xyz'
$Str="$abcd"

Result:
xbcd
	یا	
xycd
	یا
xyzd
	یا	
رشته خالی
$ ابتدای نام متغیر رو نشون میده اما کاراکتر پایانی اش چطور؟ اگه نام متغیر باید حتما بوسیله یک کاراکتر جدا کننده اضافی مثل کاراکتر فاصله محدود بشه،
استفاده از مفسر " محدود خواهد شد، هم از این جهت که درج یک کاراکتر اضافی اجباری شده و هم از این جهت که فرضا کاربرد زیر رو قبول نمی کنه چون متغیر aless$ رو نمی شناسه :
کد:
$a = 'hope'
$Str="$aless"

Result:
hopeless

اگه انتهای نام متغیر با کاراکتر خاصی مشخص نشه، تفسیر رشته بستگی به نام متغیر های تعریف شده کد داره، هم گمراهی کاربر و هم پیچیدگی تفسیر و هم کاهش سرعت تفسیر.
من برای همین پیشنهاد می کنم که کاراکتری مثل $ و اسامی متغیر ها و سایر عبارات کلیدی مثل NextLine رو صرفا زمانی پردازش کنید که بین کاراکتر های [ و ] باشند،
وقتی عبارت [abcd$] تفسیر میشه دیگه بجز متغیر abcd$ هیچ گزینه دیگری مطرح نیست.
اینطوری تفسیر رشته ساده تر میشه و تعداد کاراکتر های کنترلی حداقل یک مورد کاهش پیدا می کنه و دیگه متغیر های تعریف شده و نشده نقشی در تفسیر کلی رشته نداره.
 

JavidX

Apadana Developer
تکرار کاراکتر هم ساده است و مناسب، من انتقاد ام تعدد کاراکتر های کنترلی است که موقع تفسیر رشته بین دو تا " بکار می برید، " و [ ] و $ هر سه گروه شون مستقل از هم
کاراکتر کنترلی اند. چون کل رشته رو برای تفسیر پردازش می کنید این مستقل بودن کاراکتر های کنترلی دردسر ئه، تفسیر عبارت زیر رو در نظر بگیرید :
کد:
$a = 'x'
$ab = 'xy'
$abc = 'xyz'
$Str="$abcd"

Result:
xbcd
    یا    
xycd
    یا
xyzd
    یا    
رشته خالی
$ ابتدای نام متغیر رو نشون میده اما کاراکتر پایانی اش چطور؟ اگه نام متغیر باید حتما بوسیله یک کاراکتر جدا کننده اضافی مثل کاراکتر فاصله محدود بشه،
استفاده از مفسر " محدود خواهد شد، هم از این جهت که درج یک کاراکتر اضافی اجباری شده و هم از این جهت که فرضا کاربرد زیر رو قبول نمی کنه چون متغیر aless$ رو نمی شناسه :
کد:
$a = 'hope'
$Str="$aless"

Result:
hopeless

اگه انتهای نام متغیر با کاراکتر خاصی مشخص نشه، تفسیر رشته بستگی به نام متغیر های تعریف شده کد داره، هم گمراهی کاربر و هم پیچیدگی تفسیر و هم کاهش سرعت تفسیر.
من برای همین پیشنهاد می کنم که کاراکتری مثل $ و اسامی متغیر ها و سایر عبارات کلیدی مثل NextLine رو صرفا زمانی پردازش کنید که بین کاراکتر های [ و ] باشند،
وقتی عبارت [abcd$] تفسیر میشه دیگه بجز متغیر abcd$ هیچ گزینه دیگری مطرح نیست.
اینطوری تفسیر رشته ساده تر میشه و تعداد کاراکتر های کنترلی حداقل یک مورد کاهش پیدا می کنه و دیگه متغیر های تعریف شده و نشده نقشی در تفسیر کلی رشته نداره.
حرف به جا و منطقی بود. در اسرع وقت برنامه رو اصلاح می کنم.
ممنون دوست عزیز
 

+Mohammad+

Well-Known Member
خب اون [NextLine] رو هم میشه کوتاه تر کرد و مثل C یا ++C از یه سری کاراکتر استفاده کرد ... مثلا برای خط جدید از n\ استفاده بشه ... اینجوری یه مقداری برای کاربر راحت تر نیست؟
 

JavidX

Apadana Developer
خب اون [NextLine] رو هم میشه کوتاه تر کرد و مثل C یا ++C از یه سری کاراکتر استفاده کرد ... مثلا برای خط جدید از n\ استفاده بشه ... اینجوری یه مقداری برای کاربر راحت تر نیست؟
اصلا نکته همینه که می خوام اینطوری نشه. شما ببین کدوم اینا قابل فهم تر و خواناتره؟
کد:
$s="Name: [$name]\nFamily: [$lastname]"

$s="Name: [$name][NextLine]Family: [$lastname]"
اون اولی غیر از درد سرهایی که توی آدرس دهی بوجود میاره و باید \\ استفاده کرد خوانایی کد رو هم از بین میبره. اینطور نیست؟
 

+Mohammad+

Well-Known Member
خب حرفت درست ... ولی به نظرم به جای NextLine ... اگه NewLine رو بزاری بهتره ... یه حرف کوتاه تر ... خوانایی بهتر ... :)
 

aryana2500

Active Member
سلام تا اونجایی که میدونم تو ورژن قبلی امکان Group کردن اشیا وجود نداشت آیا تو این این ورژن این نقیصه رو بر طرف کردید؟
 

JavidX

Apadana Developer
سلام دوستان
موردی که the_king عزیز اشاره کردند بهش رسیدگی شد.

همچنین بخشی از کار با Index ها انجام شد. منظور از Index کلاً هر موقع که شما از براکت [ ] استفاده می کنید هستش. انواع مختلف متغیر می تونند Index داشته باشند. تا الان فقط دارم روی رشته ها امتحان می کنم. بعدا به آرایه ها هم میرسیم! شما با استفاده از Index روی رشته ها میتونید به کاراکترهای اون رشته دسترسی پیدا کنید.
توضیحات رو کوتاه می کنم و با مثال همه چی رو توضیح می دم. کد پایین رو ببینید:
کد:
$str = 'Javid2'
$str = ($str[$str[6]] & 'hmad')[2]

ابتدا Javid2 داخل $str ذخیره میشه و بعد کاراکتر ششمش (یعنی 2) به عنوان شماره ایندکس خودش استفاده میشه و کاراکتر دوم $str یعنی 'a' برگردونده میشه. بعد 'a' با 'hmad' پیوند میخوره و رشته ی ahmad تشکیل میشه. در پایان کاراکتر دوم یعنی 'h' داخل $str ذخیره میشه!! لذت بردید؟ :green: خیلی زحمت کشیدم تا اینطوری بتونه ایندکس ها رو درک کنه.
چیزی که الان میخوام انجام بدم اینه که تغییر مقدار توسط ایندکس ها رو درست کنم. یعنی مثل این:
کد:
$str[5]='X'

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

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
خیلی عالی هست، لذت بردم :دی
فقط اگر قراره ایندکس ها از 1 شروع بشن (one-based) هرجایی که ایندکسی وجود داره بر همین مبنا باشه، یجور نشه واسه هر تابع لازم باشه راهنما رو نگاه کنی ببینی ایندکسش zero-based هست یا one-based
 

JavidX

Apadana Developer
خیلی عالی هست، لذت بردم :دی
فقط اگر قراره ایندکس ها از 1 شروع بشن (one-based) هرجایی که ایندکسی وجود داره بر همین مبنا باشه، یجور نشه واسه هر تابع لازم باشه راهنما رو نگاه کنی ببینی ایندکسش zero-based هست یا one-based
خوشحالم :دی
دقیقاً!!! اتفاقاً همین 1 ساعت پیش داشتم به همین فکر می کردم که از یک شروع بشه یا صفر که با پژمان که حرف زدم نتیجه گرفتیم که از 1 شروع بشه.
 

جدیدترین ارسال ها

بالا