شیء دیکشنری (Dictionary) در کانستراکت
#11
(1399/1/24، 07:39 عصر)""M.gh نوشته است: 22222222222222222222
اسم اصلیتون  4
میتونی مهدی صدام کنی.
غایب
  پاسخ


 سپاس شده توسط: M.gh
#12
بهتر شد.
  پاسخ


 سپاس شده توسط:
#13
با سلام
ببخشید هی من از آموزشای شما کپی و پیست می کنم
ولی خودم یه آموزش تصویری از Dictionary با توجه به آموزش شما ساختم
عیبی که نداره انشالله...
ممنونم
[تصویر:  default-yellow.svg]
  پاسخ


 سپاس شده توسط: Master Badfar
#14
(1399/1/24، 06:44 عصر)محمد 82 نوشته است: دمت گرم . اینطورکه الان خوندم این پلاگین از ارایه هم بهتره . دلیلش واسه خودم اینه که تو ارایه اگه عناصر زیاد بشن باید اونارو با عدد برگردونیم و خیلی وقتا ممکنه قاطی کنیم . اما این دیگه همون اسمی که خودمون گذاشتیم رو داره و خیلی عالیه و این فوق العاده است . چراکه درواقع تمام متغیر های بازی رو یدونه میکنه که میتونه کمک بزرگی به پرفورمنس بازی مخصوصا هنگام لود متغیر ها بکنه . همه دیدیم که وقتی میخوایم متغیر هارو لود کنیم یخورده طول میکشه اما فک نکنم یه فایل دیکشنری اونقدری طول بکشه لودش .
راستی ، میدونید چرا اسمش دیکشنریه ؟ معنی دیکشنری میشه فرهنگ لغت . یعنی متغیری که توش پر از لغت و متغیره ؟؟؟
البته من تعبیر خودم رو از کلمه دیکشنری گفتم. ولی کلاً ساز و کاری که در کانستراکت موجوده به آرایه انجمنی معروفه که در انگلیسی بهش associative array, map, symbol table, یا dictionary میگن. یعنی نام دیگه آرایه انجمنی همون دیکشنریه.
به طور ساده یک آرایه انجمنی همون آرایه معمولی هست منتها به جای ابعاد با کلید طرف هستیم.
متأسفانه من حین نگارش مطلب از این موضوع فراموش کرده بودم و الان به مطلب این موضوع رو اضافه میکنم تا ابهام برطرف بشه.
غایب
  پاسخ


 سپاس شده توسط:
#15
عالیست
  پاسخ


 سپاس شده توسط:
#16
(1399/1/24، 10:18 صبح)Master Badfar' نوشته است: به نام خدا
سلام دوستان امیدوارم حالتون خوب باشه...
اطلاعات یکی از بنیادی ترین مفاهیم در زمینه رایانه است. یکی از قالب های ذخیره سازی داده قابل استفاده در کانستراکت در کنار آرایه، متغیر های گلوبال (Global) و اینستنس (Instance)، جیسون و XML دیکشنری (Dictionary) نام داره. همه شما با کاربرد متغیرهای گلوبال و اینستنس آشنا هستین. استفاده از قالب جیسون (JSON) و جزئیاتش رو هم که دوستانی مثل آقای ثنایی سعی کردن بهش بپردازن. قالب آرایه (Array) هم که قبلاً در این تاپیک بهش توسط بنده پرداخته شده. در واقع یک شباهت کلی بین آرایه و دیکشنری در کانستراکت (حتی از نظر کاندیشن ها و اکشن ها) وجود داره و اون هم اینه که هر دو برای ذخیره چندین مقدار داده استفاده میشن. اما دقت کنین که در آرایه ما با سه بُعد (X,Y,Z) طرف هستیم ولی در دیکشنری به جای مطرح کردن ابعاد از مشخصه ای به نام کلید (Key) برای تمایز بخشیدن به داده ها استفاده می کنیم.
در واقع در عالم برنامه نویسی، دیکشنری نام دیگه آرایه انجمنی هست. یک آرایه انجمنی دقیقاً همون آرایه معمولی هست منتها به جای ابعاد در اون با کلید طرف هستیم. نام های دیگر آرایه انجمنی به غیر از دیشکنری associative array, map, symbol table هستن.
با مطالبی که تا به اینجا مطرح شد، چرا باید از دیکشنری استفاده کنیم؟
  • در شی دیکشنری همانند شیء آرایه می توانیم از قالب اطلاعاتی جیسون (JSON) به صورت هدفمندی استفاده کنیم. به طوری که قادر هستیم از مقادیر ذخیره شده در این شیء خروجی جیسون بگیریم. در مقابل می توانیم اطلاعاتی را در قالب جیسون به شیء دیکشنری وارد کنیم.
  • * شیء دیکشنری هیچ بررسی ساختار زبانی (مثل بررسی Spelling یا املا) را انجام نمی دهد.
  • * شیء دیکشنری قادر است مقادیر بسیار زیادتری را نسبت به شیء آرایه و انواع متغیرها در خود نگهداری کند.
  • * استفاده از شیء دیکشنری اصلاً پیچیده نیست و به مراتب ساده تر است.

بررسی مفهوم کلید (Key) در دیکشنری:
همانطور که بیان کردم به کمک شیء دیکشنری قادر هستیم مقادیر بسیار زیادی رو با مشخص کردن یک کلید منحصر به فرد و یکتا (Unique) برای هر مقدار موردنظر ذخیره کنیم. پس مهمترین اصل برای ذخیره سازی مقادیر مختلف متنی و عددی (رشته ها) در دیکشنری تعیین یک کلید هست که همونطور که گفته شد باعث میشه بین مقادیر مختلف تمایز ایجاد بشه و در واقع هر کلید نشانگر وجود یک داده هست که در دیکشنری ذخیره شده  و مشخصه هر داده یا چیزی که به ما اون داده رو میشناسونه کلید همون داده است. یک کلید میتونه یک رشته شامل اعداد و حروف و کاراکترهای مختلف ASCII (اَسکی) باشه. کلیدهایی که برای شیء دیکشنری در کانستراکت تعریف میشن اصطلاحاً case-sensetive (حساس به بزرگی و کوچکی حروف) هستن. با این حساب کلیدهای "test" و "TEST" دو کلید متفاوت تلقی میشن. 
تعریف یک مقدار دلخواه در شیء دیکشنری:
گفتیم که بنیادی ترین چیزی که در شیء دیکشنری برای هر داده باهاش سر و کار داریم کلید هست. فرض کنین قصد داریم مقدار 25 رو در قالب یک کلید در شیء دیکشنری تعریف کنیم. با استفاده از اکشن Add Key قادر هستیم یک مقدار جدید رو تعریف کنیم. این اکشن شامل دو پارامتر Key و Value هست. اجازه بدین نام کلید رو برای ذخیره این داده "score" تعریف کنیم. پس پارامترهای اکشن به این شکل میشن:
کد:
Key : "score"
Value : 25

(دقت کنین چون مقدار موردنظرمون یک عدد هست برای همین اون رو در داخل دابل کوتیشن قرار ندادم تا رشته تلقی نشه)
بعد از اینکه موفق شدیم یک مقدار رو در دیکشنری تعریف کنیم باید بتونیم جایی که نیاز باشه اون مقدار تعریف شده رو در یکجا استخراج کنیم و به کار ببندیم. فرض کنین من قصد دارم مقداری که ذخیره کردم رو در یک تکست نمایش بدم. بعد از انتخاب اکشن Set text to شیء تکست پارامتر Text اکشن رو به شکل زیر تنظیم می کنم:
کد:
Dictionary.Get("socre")
بعد از اجرای اکشن مقدار تکست به 25 تغییر می کند.
اکشن (Action) های شیء دیکشنری:
  • اکشن Add Key برای اضافه کردن یک مقدار جدید به کار می رود. این اکشن شامل دو پارامتر Key و Value است.
  • اکشن Clear تمامی مقادیر ذخیره شده در شیء دیکشنری را حذف کرده و شیء دیکشنری را خالی می کند.
  • اکشن Delete Key برای حذف کردن یک مقدار به کار می رود. این اکشن تنها شامل پارامتر Key است.
  • اکشن Set Key برای تغییر مقدار یک کلید که از قبل ایجاد شده باشد به کار می رود. این اکشن شامل دو پارامتر Key و Value است.
  • اکشن Download مقادیر ذخیره شده در درون دیکشنری را در قالب یک فایل جیسون (JSON) خروجی می دهد. این اکشن تنها شامل پارامتر Filename می باشد که نام فایل جیسون خروجی را مشخص می کند. پس از اجرای این اکشن فایل جیسون خروجی بلافاصله دانلود می شود.
  • اکشن Load برای بارگیری خروجی جیسون (JSON) دیکشنری به کار می رود. این اکشن تنها شامل پارامتر JSON می باشد. می توان به پارامتر JSON نام فایلی که توسط اکشن Download بارگیری شده و یا یک رشته جیسون دلخواه را نسبت داد.
  • اکشن Destroy به طور کل شیء دیکشنری را از پروژه حذف می کند.

کاندیشن های شیء دیکشنری:
  • * کاندیشن Compare Value برای چک کردن برابر بودن مقدار ذخیره شده در یک کلید مشخص با یک عبارت دلخواه به کار می رود.
  • * کاندیشن Has Key برای چک کردن وجود داشتن یک کلید دلخواه در شیء دیکشنری به کار می رود.
  • * کاندیشن Compare Value برای چک کردن برابر بودن مقدار ذخیره شده در یک کلید مشخص با یک عبارت دلخواه به کار می رود.
  • * کاندیشن Is empty می تواند مقدار True یا False را با توجه به خالی بودن یا نبودن دیکشنری برگرداند. اگر شیء دیکشنری خالی بود مقدار True برگردانده می شود و اکشنی که برای آن تعریف شده است اجرا می شود.
  • * کاندیشن Compare Current Value برای بررسی کلید جاری در یک حلقه For each به کار می رود. در واقع این کاندیشن مقدار کلیدی که در آخرین Loopindex (مرحله از حلقه) در حلقه For each به کار رفته باشد را در نظر می گیرد.
  • * کاندیشن For each Key یک حلقه تشکیل می دهد که مطابق آن یک اکشن مشخص که برای آن تعریف شده است به تعداد کلیدهای شیء دیکشنری اجرا می شود.

اکسپرشن های شیء دیکشنری:
  • * اکسپرشن Get برای دریافت مقدار یک کلید به کار می رود. برای استفاده از این اکسپرشن پس از درج آن باید در داخل پرانتز نام کلید موردنظر را به عنوان پارامتر اکسپرشن درج کنیم. به طور مثال: 
کد:
Dictionary.Get("score")
(دقت کنید در صورتی که کلید موردنظر موجود نباشد این اکسپرشن عدد 0 را بر می گرداند.)
  • * اکسپرشن KeyCount تعداد کلیدهای شیء دیکشنری را میشمارد و حاصل را بر می گرداند. این اکسپرشن هیچ پارامتری نمی پذیرد و تنها به شکل زیر به کار می رود:
کد:
Dictionary.KeyCount
  • * اکسپرشن AsJSON مقادیر ذخیره شده در دیکشنری را به صورت یک رشته جیسون برمی گرداند. این اکسپرشن هیچ پارامتری نمی پذیرد و تنها به شکل زیر به کار می رود:
کد:
Dictionary.AsJSON

ذخیره فایل جیسون خروجی شیء دیکشنری در سرور:
قبل از هر چیز لازمه شیء اِی جَکس (AJAX) رو در پروژه خودتون اضافه کنین. بعد در داخل هاستتون کدهای PHP زیر رو که نوشتم ذخیره کنین و طبق توضیحات بعدی عمل کنین.
(حتماً توجه کنین که وقتی فایل PHP رو در یک دایرکتوری یا پوشه در هاست یا سرور خودتون آپلود می کنین فایلهای جیسونی که قصد دارین ذخیره بشن هم در همون دایرکتوری ذخیره میشن.)
کد php:
<?php
/**
 * @author Master Badfar
 * @copyright 2020
 */
 // صدور مجوز ajax برای مرورگر
 header('Access-Control-Allow-Origin: *'); 
// قطع نمایش خطاهای مفسر PHP
ini_set('display_errors'0);
error_reporting(~E_WARNING & ~E_NOTICE & ~E_STRICT);
// تعریف متغیر میزان ارور
$error 0;
// دریافت مقادیر جیسون و نام فایل جیسون و ذخیره آنها در یک متغیر
$json_string $_POST['json'];
$filename $_POST['filename'];
// بررسی خالی نبودن دو پارامتر مقدار جیسون و نام فایل جیسون
if (empty($json_string)){
    echo "You should enter a json string." '</br>';
    $error++;
    }elseif(empty($filename)){
        echo "You should enter a name for json file." '</br>';
        $error++;
}
// نمایش تعداد کل ارورها
if ($error 0){
    echo "Number of Errors that were found: " $error;
}
// بررسی موجود بودن نام فایل قید شده؛ در صورتی که موجود نبود یک فایل جدید جیسون ساخته شود و در صورتی که موجود بود محتویات جدید جیسون در ادامه فایل گنجانده شود
if (!file_exists($filename ".json") && $error == 0){
    $openfile fopen$filename".json""w") or die("Unable to open file!");
  fwrite($openfile$json_string);
  fclose($myfile);
  echo "JSON File ' " $filename " ' successfully saved!";
  }elseif(file_exists($filename ".json" && $error == 0){
    $openfile fopen($filename".json""w") or die("Unable to open file!");
    fwrite($openfile$json_string);
  fclose($myfile);
  echo "JSON File ' " $filename " ' successfully updated!";
}
?>
حالا برای ذخیره محتویات دیکشنری به صورت جیسون در سرور باید اکشن Post to URL شیء AJAX رو انتخاب کنین. پارامتر Tag رو هر چی دوست داشتین قرار بدین یا میتونین اصلاً مقداری براش لحاظ نکنین. برای پارامتر URL آدرس فایل PHP تون رو وارد کنین. مثلاً آدرس فایل PHP شما میتونه به این شکل باشه:
کد:
[url=http://yourhost.com/file.php]302 Found[/url]
  به پارامتر Method دست نزنین. پارامتر Data رو هم به طریقی که در ادامه بیان میکنم وارد کنین: 
کد:
"json=" &Dictionary.AsJSON& "&filename=" & "test"
در واقع دو چیز به فایل PHP شما در سرور ارسال میشه. یکی نام فایل جیسون و دیگری هم محتویات فایل جیسون. همونطور که می بینین به کمک اکسپرشن AsJSON رو به روی عبارت json مقدار جیسون دیکشنری مون رو به سرور ارسال می کنیم. برای ارسال نام فایل جیسون موردنظرمون باید جلوی عبارت filename نام فایل رو بدون نوشتن فرمت .json درج کنیم. اینجا من نام فایل رو test انتخاب کردم. 
خروجی های کد PHP :
این کد به ما چندین خروجی با توجه به شرایط مختلف میده. 
  • * اگر هیچ مقداری برای json در نظر گرفته نشده باشد عبارت زیر نمایش داده می شود:
کد:
You should enter a json string.
  • * اگر هیچ مقداری برای filename در نظر گرفته نشده باشد عبارت زیر نمایش داده می شود:
کد:
You should enter a name for json file.
  • * اگر بعد از ارسال درخواست به فایل PHP فایل جیسونی با نام مشابه نام وارد شده در درخواست در سرور موجود باشد، محتویات فایل موجود در سرور تماماً حذف می شود و محتویات درخواست ارسال شده جایگزین محتویات قبلی می شود و به نوعی محتویات فایل جیسون آپدیت می شود. نمایش پیغام زیر حاکی از این موضوع است:
کد:
JSON File ' x ' successfully upadated!
  • * اگر بعد از ارسال درخواست به فایل PHP فایل جیسونی با نام مشابه نام وارد شده در درخواست در سرور موجود نباشد، به طبع یک فایل جیسون جدید با نام قید شده در درخواست ارسالی ایجاد می شود و محتوای جیسون موردنظر به فایل ایجاد شده در سرور اضافه می شود. پیغام زیر حاکی از این موضوع است:
کد:
JSON File ' x ' successfully saved!
  • * اگر تعداد ارورهای یافت شده (شامل خالی بودن محتوای جیسون و نام فایل جیسون) بیش از یک عدد باشد پیغام زیر پس از نمایش تمامی ارورها چاپ خواهد شد:
کد:
Number of Errors that were found: x
(عبارت x بیانگر تعداد ارورهای یافت شده است)
دریافت مقادیر ذخیره شده در یک فایل جیسون موجود در سرور و اضافه کردن محتویات فایل جیسون به دیکشنری:
خُب ما بررسی کردیم که چطور محتوای جیسون موردنظرمون رو در سرور ذخیره کنیم. شاید لازم باشه بخوایم محتوای یک فایل جیسون که در سرور ذخیره شده رو وارد دیکشنری کنیم. برای این منظور قبل از هر چیزی اگر شیء AJAX رو به پروژه مون اضافه نکردیم اضافه می کنیم. بعد کدهای PHP زیر رو در سرور خودمون ذخیره می کنیم.
(حتماً توجه کنین که این فایل PHP رو باید داخل دایرکتوری یا پوشه ای از هاست یا سرورتون قرار بدین که فایل های جیسون در اون وجود داره.)
کد php:
<?php
/**
* @author Master Badfar
* @copyright 2020
*/
// صدور مجوز ajax برای مرورگر
header('Access-Control-Allow-Origin: *');
// قطع نمایش خطاهای مفسر PHP
ini_set('display_errors'0);
error_reporting(~E_WARNING & ~E_NOTICE & ~E_STRICT);
// تعریف متغیر میزان ارور
$error 0;
// دریافت نام فایل جیسون موردنظر و ذخیره آن در یک متغیر
$filename $_POST['filename'];
// بررسی خالی نبودن پارامتر filename
    if(empty($filename)){
        echo "You should enter the name of the json file." '</br>';
        $error++;
// بررسی وجود داشتن فایل وارد شده
   }elseif(!file_exists($filename ".json")){
    echo "The file does not exist." '</br>';
    $error++;
    }
        // نمایش تعداد کل ارورها
             if($error 0){
                echo "Number of Errors that were found: " $error;
}
// خواندن فایل جیسون موردنظر
if ($error == 0){
// باز کردن فایل جهت خواندن
$LoadFile fopen($filename ".json""r") or die(" File not found");
// تشکیل حلقه while جهت خواندن خط به خط فایل
while(!feof($LoadFile)){
    echo fgets($LoadFile);
}
// پایان حلقه
//
// بستن فایل باز شده
fclose($LoadFile);
}
?>
حالا کافیه اکشن Post to URL شی AJAX رو انتخاب کنیم. پارامتر Tag رو هر چی دوست داشتین قرار بدین یا اصلاً بهش مقداری ندین. برای پارامتر URL آدرس فایل PHP تون رو وارد کنین. مثلاً آدرس فایل PHP شما میتونه به این شکل باشه:
کد:
[url=http://yourhost.com/file.php]302 Found[/url]
  به پارامتر Method دست نزنین. پارامتر Data رو هم به طریقی که در ادامه بیان میکنم وارد کنین: 
کد:
"filename="&"test"
(دقت کنین نام فایل جیسون موردنظر رو حتماً بدون درج فرمت .json وارد کنید.)
خُب پروسه بسیار ساده است. ما یک درخواست به فایل PHP ارسال می کنیم و اگر فایل موجود بود و مشکلی وجود نداشت PHP محتویات فایل رو به ما برمیگردونه یا برای ما نمایش میده. حالا چطور باید این محتویات جیسون رو وارد دیکشنری بکنیم؟ کافیه از اکشن Load استفاده کنین و مقدار پارامتر JSON این اکشن رو برابر با AJAX.Lastdata قرار بدین. تبریک میگم! به راحتی تونستین محتویات فایل جیسون رو وارد دیکشنری کنین. حالا میتونین روی هر کلید دلخواه که در رشته جیسون تعریف شده باشه پردازش داشته باشین.
خروجی های کد PHP :
این کد به ما چندین خروجی با توجه به شرایط مختلف میده. 
  • * اگر هیچ مقداری برای filename در نظر گرفته نشده باشد عبارت زیر نمایش داده می شود:
کد:
You should enter the name of the json file.
  • * اگر فایل موردنظر در سرور موجود نبود پیغام زیر نمایش داده می شود:
کد:
The file does not exist.
  • * اگر تعداد ارورهای یافت شده (شامل خالی بودن نام فایل جیسون و موجود نبودن فایل موردنظر) بیش از یک عدد باشد پیغام زیر پس از نمایش تمامی ارورها چاپ خواهد شد:
کد:
Number of Errors that were found: x
(عبارت x بیانگر تعداد ارورهای یافت شده است)
امیدوارم این مطلب براتون کاربردی و مفید بوده باشه. 
برای نوشتن این مطلب زمان نسبتاً زیادی صرف شده پس لطفاً با سپاس ها و نظرات گرمتون حقیر رو بیش از پیش به نوشتن این دست از مطالب ترغیب کنین.
خوشحال میشم اگر موردی جا افتاده یا درست ادا و بیان نشده در ادامه به حقیر گوشزد کنین.
با آرزوی بهترین ها...

 


میشه یک سورسی بدین ممنون می شم
 
کد:
public void myLifeStyle (var life)
{
      var createGame;
      var anime;

      if ( anime == false && createGame == false )
       {
             Destroy(life);
       }
}
^_^
مثل بعضیا خودمو دست بالا نمی گیرم که پند بدم
مث بعضیا هم بچه نیستم که شعر و حدیث بنویسم
مثل بعضیا هم خیره نیستم هنو یه بازی رو نساختم عکسشو بزارم امضا
فقط حال و روز دلمو گفتم
  پاسخ


 سپاس شده توسط: oak ، rezamms


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
Star مهم آموزش خروجی اندروید روی سیستم شخصی rezamms 127 76,560 1402/8/24، 09:00 عصر
آخرین ارسال: mehdiosw
  مهم آموزش تصویری خروجی مستقیم - یکبار برای همیشه! rezamms 33 17,763 1401/2/13، 09:39 عصر
آخرین ارسال: kamran_cn
  خروجی اندرید davinmstr1 2 2,165 1400/8/4، 10:23 عصر
آخرین ارسال: ᔕinaᗪehghani
  AAB (بسته برنامه اندروید) چيست؟ + نحوه خروجي گرفتن در كرودوا ᔕinaᗪehghani 15 7,037 1400/6/21، 01:55 صبح
آخرین ارسال: mehdi1100
  رفع مشکل خروجی فونگپ (: M.gh 11 7,344 1400/4/10، 02:17 صبح
آخرین ارسال: oak

پرش به انجمن: