Collection یکی از قدرتمندترین امکاناتی است که لاراول در اختیار شما قرار میدهد. در واقع اگر با ماهیت Collectionها در لاراول آشنایی نداشته باشید، احتمالا در هنگام کار کردن با الوکوئنت (Eloquent) لاراول با مشکل مواجه میشوید. به طور مثال در سادهترین حالت، فرض کنید دهها داده دارید که میخواهید میانگین این دادهها را حساب کنید، یا فرض کنید که آرایهای از اعداد، نامها، تاریخ مصرف کالاها، قیمت مصرف کننده و قیمت فروش دارید، حال بدون استفاده از Collectionها محاسبه مجموع فروش یک روز تقریبا غیر ممکن میشود. اینها تنها مثالهای بسیار کوچکی از Collectionها است که در این مقاله به معرفی آنها و آموزش کار با آن میپردازیم.
لاراول تا به امروز شامل بیش از ۱۲۰ Collection با قابلیتهای شگفت انگیزی است که ابتدا این Collectionها را نام میبریم و سپس به توضیح هر کدام از آنها میپردازیم.
این متد تمام دادههای یک آرایه را برمیگرداند.
collect([1, 2, 3])->all();
// [1, 2, 3]
این متد و متد ()avg میانگین دادهها را به ما برمیگرداند.
$average = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->avg('foo');
// 20
$average = collect([1, 1, 2, 4])->average();
// 2
این متد یک آرایه را بهصورت مساوی دسته بندی میکند. بهطور مثال اگر بر روی یک آرایهی ۸ تایی (4)chunk را اعمال کنیم. این آرایه به ۲ آرایهی ۴ تایی تقسیم میشود، البته اگر بهطور مثال تعداد اعضای آرایه ۱۰ باشد، chunk آن را به ۲ آرایهی ۴ تایی و ۱ آرایهی ۲ تایی تقسیم میکند.
$collection = collect([1, 2, 3, 4, 5, 6, 7]);
$chunks = $collection->chunk(4);
$chunks->toArray();
// [[1, 2, 3, 4], [5, 6, 7]]
این متد هنگام کار با Viewها بسیار کاربردی میباشد، در مثال زیر Productها را به آرایههای ۳ تایی تقسیم کردیم و سپس نمایش دادیم.
@foreach ($products->chunk(3) as $chunk)
<div class="row">
@foreach ($chunk as $product)
<div class="col-xs-4">{{ $product->name }}</div>
@endforeach
</div>
@endforeach
این متد چند آرایه را به یک آرایه تبدیل میکند.
$collection = collect([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
$collapsed = $collection->collapse();
$collapsed->all();
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
این متد یک Collection جدید از روی Collection اصلی ایجاد میکند، یعنی میتوانیم از این متد هنگامی که میخواهیم از یک Collection کپی بگیریم، استفاده کنیم.
$collectionA = collect([1, 2, 3]);
$collectionB = $collectionA->collect();
$collectionB->all();
// [1, 2, 3]
این متد بر روی بیش از یک آرایه اعمال میشود، به این صورت که فرض کنید یک آرایه با مقادیر نام و سن و یک آرایهی دیگر با مقدار علی و ۲۰ داریم. حال اگر این دو آرایه را Combine کنیم، آرایهی نهایی به صورت [ ‘۲۰'<=’سن’ , ‘علی'<=’نام’ ] درمیآید.
$collection = collect(['name', 'age']);
$combined = $collection->combine(['George', 29]);
$combined->all();
// ['name' => 'George', 'age' => 29]
این متد Valueهای دو یا چند آرایه را در یک آرایه قرار میدهد.
$collection = collect(['John Doe']);
$concatenated = $collection->concat(['Jane Doe'])->concat(['name' => 'Johnny Doe']);
$concatenated->all();
// ['John Doe', 'Jane Doe', 'Johnny Doe']
از این متد زمانی استفاده میکنیم که بخواهیم بدانیم آیا یک Value در یک آرایه وجود دارد یا خیر.
$collection = collect(['name' => 'Desk', 'price' => 100]);
$collection->contains('Desk');
// true
$collection->contains('New York');
// false
همچنین میتوانیم چک کنیم که آیا یک Key و Value بهطور همزمان در یک آرایه وجود دارند یا خیر.
$collection = collect([
['product' => 'Desk', 'price' => 200],
['product' => 'Chair', 'price' => 100],
]);
$collection->contains('product', 'Bookcase');
// false
این متد تعداد دادههای موجود در یک Collection یا آرایه را برمیگرداند.
$collection = collect([1, 2, 3, 4]);
$collection->count();
// 4
این متد تعداد تكرار هر داده را به ما برمیگرداند.
$collection = collect([1, 2, 2, 2, 3]);
$counted = $collection->countBy();
$counted->all();
// [1 => 1, 2 => 3, 3 => 1]
این متد بهطور مثال هنگامی که بر روی دو آرایه اعمال شود، دادهی اول آرایهی اول را به تمام دادههای آرایهی دوم، داده دوم آرایهی اول را به تمام دادههای آرایهی دوم و به همین صورت تا انتها نسبت میدهد.
$collection = collect([1, 2]);
$matrix = $collection->crossJoin(['a', 'b']);
$matrix->all();
/*
[
[1, 'a'],
[1, 'b'],
[2, 'a'],
[2, 'b'],
]
*/
$collection = collect([1, 2]);
$matrix = $collection->crossJoin(['a', 'b'], ['I', 'II']);
$matrix->all();
/*
[
[1, 'a', 'I'],
[1, 'a', 'II'],
[1, 'b', 'I'],
[1, 'b', 'II'],
[2, 'a', 'I'],
[2, 'a', 'II'],
[2, 'b', 'I'],
[2, 'b', 'II'],
]
*/
این متد در هر جایی از کد بیاید تمام دادههای درخواستی را نمایش میدهد و پس از آن ادامهی کد متوقف خواهد شد.
$collection = collect(['John Doe', 'Jane Doe']);
$collection->dd();
/*
Collection {
#items: array:2 [
0 => "John Doe"
1 => "Jane Doe"
]
}
*/
اگر میخواهید که ادامهی کد متوقف نشود، میتوانید بهجای dd از dump استفاده کنید.
این متد در هر جایی از کد بیاید تمام دادههای درخواستی را نمایش میدهد و پس از کد ادامه پیدا میکند.
The dump method dumps the collection's items:
$collection = collect(['John Doe', 'Jane Doe']);
$collection->dump();
/*
Collection {
#items: array:2 [
0 => "John Doe"
1 => "Jane Doe"
]
}
*/
این متد اگر بر روی ۲ آرایه اعمال شود، تمام دادههایی که در آرایهی اول وجود دارد ولی در آرایهی دوم وجود ندارد را برمیگرداند.
$collection = collect([1, 2, 3, 4, 5]);
$diff = $collection->diff([2, 4, 6, 8]);
$diff->all();
// [1, 3, 5]
این متد همانند متد diff عمل میکند با این تفاوت که بهجای بررسی Value ها، هم Value و هم Key دو یا چند آرایه را با هم مطابقت میدهد و در صورتی که دقیق همان Key و Value که در آرایهی اول وجود دارد در آرایهی دوم وجود نداشته باشد، Key و Value آرایهی اول را برمیگرداند.
$collection = collect([
'color' => 'orange',
'type' => 'fruit',
'remain' => 6,
]);
$diff = $collection->diffAssoc([
'color' => 'yellow',
'type' => 'fruit',
'remain' => 3,
'used' => 6,
]);
$diff->all();
// ['color' => 'orange', 'remain' => 6]
این متد همانند متد diff عمل میکند با این تفاوت که بهجای بررسی Value ها، Keyها را بررسی میکند.
$collection = collect([
'one' => 10,
'two' => 20,
'three' => 30,
'four' => 40,
'five' => 50,
]);
$diff = $collection->diffKeys([
'two' => 2,
'four' => 4,
'six' => 6,
'eight' => 8,
]);
$diff->all();
// ['one' => 10, 'three' => 30, 'five' => 50]
این متد تمام دادههایی که ۲ بار تکرار شدهاند را برمیگرداند.
$collection = collect(['a', 'b', 'a', 'c', 'b']);
$collection->duplicates();
// [2 => 'a', 4 => 'b']
اگر بخواهیم در یک یا چند آرایه، بین Keyهای خاص، دنبال مقادیری بگردیم که ۲ بار تکرار شدهاند، به شکل زیر عمل میکنیم.
$employees = collect([
['email' => 'abigail@example.com', 'position' => 'Developer'],
['email' => 'james@example.com', 'position' => 'Designer'],
['email' => 'victoria@example.com', 'position' => 'Developer'],
])
$employees->duplicates('position');
// [2 => 'Developer']
این متد تمام دادههای یک آرایه را مانند حلقه foreach جدا میکند و برمیگرداند.
$collection->each(function ($item, $key) {
//
});
این متد تمام دادههای یک آرایه را بهغیر از مقادیری که وارد کردیم برمیگرداند.
$collection = collect(['product_id' => 1, 'price' => 100, 'discount' => false]);
$filtered = $collection->except(['price', 'discount']);
$filtered->all();
// ['product_id' => 1]
این متد اولين دادهی یک آرایه را برمیگرداند.
collect([1, 2, 3, 4])->first();
// 1
این متد اولين دادهی یک آرایه را با شرط خاصی که بیان میکنیم برمیگرداند.
$collection = collect([
['name' => 'Regena', 'age' => null],
['name' => 'Linda', 'age' => 14],
['name' => 'Diego', 'age' => 23],
['name' => 'Linda', 'age' => 84],
]);
$collection->firstWhere('name', 'Linda');
// ['name' => 'Linda', 'age' => 14]
بهطور مثال در کد بالا اولين دادهای که نامش Linda است را دریافت میکنیم.
$collection->firstWhere('age', '>=', 18);
// ['name' => 'Diego', 'age' => 23]
یا در این مثال اولين دادهای که سنش بزرگتر مساوی ۱۸ باشد را دریافت میکنیم.
این متد جای Key و Value آرایه را عوض میکند.
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$flipped = $collection->flip();
$flipped->all();
// ['taylor' => 'name', 'laravel' => 'framework']
این متد یک Key و Value را از آرایه پاک میکند.
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$collection->forget('name');
$collection->all();
// ['framework' => 'laravel']
در این متد با فراخوانی Key یک داده میتوانید Value آن داده را بخوانید.
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$value = $collection->get('name');
// taylor
این متد یک آرایه را گروهبندی میکند، یعنی هنگامی که یک مقدار را به این متد ارسال میکنیم، با توجه به آن مقدار، گروههای مختلفی از دادههای آن آرایه ایجاد میشود.
$collection = collect([
['account_id' => 'account-x10', 'product' => 'Chair'],
['account_id' => 'account-x10', 'product' => 'Bookcase'],
['account_id' => 'account-x11', 'product' => 'Desk'],
]);
$grouped = $collection->groupBy('account_id');
$grouped->toArray();
/*
[
'account-x10' => [
['account_id' => 'account-x10', 'product' => 'Chair'],
['account_id' => 'account-x10', 'product' => 'Bookcase'],
],
'account-x11' => [
['account_id' => 'account-x11', 'product' => 'Desk'],
],
]
*/
این متد وجود یک یا چند داده را در آرایه بررسی میکند.
$collection = collect(['account_id' => 1, 'product' => 'Desk', 'amount' => 5]);
$collection->has('product');
// true
$collection->has(['product', 'amount']);
// true
$collection->has(['amount', 'price']);
// false
این متد Valueهای یک آرایه را به هم میچسباند.
$collection = collect([
['account_id' => 1, 'product' => 'Desk'],
['account_id' => 2, 'product' => 'Chair'],
]);
$collection->implode('product', ', ');
// Desk, Chair
collect([1, 2, 3, 4, 5])->implode('-');
// '1-2-3-4-5'
این متد هنگام مقایسه ۲ آرایه تمام دادههایی که در آرایهی اول و دوم وجود دارد را به ما نشان میدهد.
$collection = collect(['Desk', 'Sofa', 'Chair']);
$intersect = $collection->intersect(['Desk', 'Chair', 'Bookcase']);
$intersect->all();
// [0 => 'Desk', 2 => 'Chair']
Key دادههای جدید همان Key آرایهی اول میباشد
این متد هنگام مقایسه ۲ آرایه تمام Key هایی که در آرایهی اول و دوم وجود دارد را همراه با Value آرایهی اول به ما نشان میدهد.
$collection = collect([
'serial' => 'UX301', 'type' => 'screen', 'year' => 2009,
]);
$intersect = $collection->intersectByKeys([
'reference' => 'UX404', 'type' => 'tab', 'year' => 2011,
]);
$intersect->all();
// ['type' => 'screen', 'year' => 2009]
این متد خالی بودن یک آرایه را چک میکند.
collect([])->isEmpty();
// true
این متد خالی نبودن یک آرایه را چک میکند.
collect([])->isNotEmpty();
// false
این متد Valueهای یک آرایه را همانطور که ما بخواهیم به هم میچسباند.
collect(['a', 'b', 'c'])->join(', '); // 'a, b, c'
collect(['a', 'b', 'c'])->join(', ', ', and '); // 'a, b, and c'
collect(['a', 'b'])->join(', ', ' and '); // 'a and b'
collect(['a'])->join(', ', ' and '); // 'a'
collect([])->join(', ', ' and '); // ''
این متد آخرین دادهی یک آرایه را برمیگرداند.
collect([1, 2, 3, 4])->last(function ($value, $key) {
return $value < 3;
});
// 2
collect([1, 2, 3, 4])->last();
// 4
این متد بزرگترین دادهی یک آرایه را برمیگرداند.
$max = collect([['foo' => 10], ['foo' => 20]])->max('foo');
// 20
$max = collect([1, 2, 3, 4, 5])->max();
// 5
این متد دادهی وسطی یک آرایه را برمیگرداند و در صورتی که دو آرایه در وسط قرار داشته باشند میانگین آنها را برمیگرداند.
$median = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->median('foo');
// 15
$median = collect([1, 1, 2, 4])->median();
// 1.5
این متد دادههای یک آرایه را به هم میچسباند و در صورتی که یکی از دادهها در آرایهی دوم قرار داشته باشد آن را در آرایهی نهایی قرار میدهد.
$collection = collect(['product_id' => 1, 'price' => 100]);
$merged = $collection->merge(['price' => 200, 'discount' => false]);
$merged->all();
// ['product_id' => 1, 'price' => 200, 'discount' => false]
$collection = collect(['Desk', 'Chair']);
$merged = $collection->merge(['Bookcase', 'Door']);
$merged->all();
// ['Desk', 'Chair', 'Bookcase', 'Door']
این متد دادههای یک آرایه را به هم میچسباند و در صورت تکرار یک داده، هر دوی آنها را در آرایه نهایی قرار میدهد.
$collection = collect(['product_id' => 1, 'price' => 100]);
$merged = $collection->mergeRecursive(['product_id' => 2, 'price' => 200, 'discount' => false]);
$merged->all();
// ['product_id' => [1, 2], 'price' => [100, 200], 'discount' => false]
این متد کوچکترین داده یک آرایه را برمیگرداند.
$min = collect([['foo' => 10], ['foo' => 20]])->min('foo');
// 10
$min = collect([1, 2, 3, 4, 5])->min();
// 1
این متد تمام Valueهای یک آرایه با یک Key خاص را برمیگرداند.
$collection = collect([
['product_id' => 'prod-100', 'name' => 'Desk'],
['product_id' => 'prod-200', 'name' => 'Chair'],
]);
$plucked = $collection->pluck('name');
$plucked->all();
// ['Desk', 'Chair']
این متد دادهی آخر یک آرایه را ابتدا به ما نشان میدهد و سپس آن را از آرایهی اصلی حذف میکند.
$collection = collect([1, 2, 3, 4, 5]);
$collection->pop();
// 5
$collection->all();
// [1, 2, 3, 4]
این متد یک داده را به ابتدای یک آرایه اضافه میکند.
$collection = collect([1, 2, 3, 4, 5]);
$collection->prepend(0);
$collection->all();
// [0, 1, 2, 3, 4, 5]
این متد Value یک Key را ابتدا به ما نشان میدهد و سپس آن را از آرایهی اصلی حذف میکند.
$collection = collect(['product_id' => 'prod-100', 'name' => 'Desk']);
$collection->pull('name');
// 'Desk'
$collection->all();
// ['product_id' => 'prod-100']
این متد یک داده را به انتهای یک آرایه اضافه میکند.
$collection = collect([1, 2, 3, 4]);
$collection->push(5);
$collection->all();
// [1, 2, 3, 4, 5]
این متد یک Key و Value را به انتهای یک آرایه اضافه میکند.
$collection = collect(['product_id' => 1, 'name' => 'Desk']);
$collection->put('price', 100);
$collection->all();
// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]
این متد یک داده را بهصورت تصادفی برمیگرداند.
$collection = collect([1, 2, 3, 4, 5]);
$collection->random();
// 4 - (retrieved randomly)
این متد دادههای دو آرایه را در صورت وجود جابهجا و در صورت وجود نداشتن، ایجاد میکند.
$collection = collect(['Taylor', 'Abigail', 'James']);
$replaced = $collection->replace([1 => 'Victoria', 3 => 'Finn']);
$replaced->all();
// ['Taylor', 'Victoria', 'James', 'Finn']
این متد دادههای یک آرایه را از آخر به اول مرتب میکند.
$collection = collect(['a', 'b', 'c', 'd', 'e']);
$reversed = $collection->reverse();
$reversed->all();
/*
[
4 => 'e',
3 => 'd',
2 => 'c',
1 => 'b',
0 => 'a',
]
*/
این متد Key یک Value را پیدا میکند.
$collection = collect([2, 4, 6, 8]);
$collection->search(4);
// 1
این متد دادهی اول یک آرایه را ابتدا به ما نشان میدهد و سپس آن را از آرایهی اصلی حذف میکند.
$collection = collect([1, 2, 3, 4, 5]);
$collection->shift();
// 1
$collection->all();
// [2, 3, 4, 5]
این متد دادههای یک آرایه را درهم میکند.
$collection = collect([1, 2, 3, 4, 5]);
$shuffled = $collection->shuffle();
$shuffled->all();
// [3, 2, 5, 1, 4] - (generated randomly)
این متد دادههای یک آرایه را از کوچک به بزرگ مرتب میکند.
$collection = collect([5, 3, 1, 2, 4]);
$sorted = $collection->sort();
$sorted->values()->all();
// [1, 2, 3, 4, 5]
این متد دادههای یک آرایه را با توجه به Key وارد شده از کوچک به بزرگ مرتب میکند.
$collection = collect([
['name' => 'Desk', 'price' => 200],
['name' => 'Chair', 'price' => 100],
['name' => 'Bookcase', 'price' => 150],
]);
$sorted = $collection->sortBy('price');
$sorted->values()->all();
/*
[
['name' => 'Chair', 'price' => 100],
['name' => 'Bookcase', 'price' => 150],
['name' => 'Desk', 'price' => 200],
]
*/
این متد دادههای یک آرایه را از بزرگ به کوچک مرتب میکند.
$collection = collect([5, 3, 1, 2, 4]);
$sorted = $collection->sortDesc();
$sorted->values()->all();
// [5, 4, 3, 2, 1]
این متد Keyهای یک آرایه را از حرف یا عدد کوچک به بزرگ مرتب میکند.
$collection = collect([
'id' => 22345,
'first' => 'John',
'last' => 'Doe',
]);
$sorted = $collection->sortKeys();
$sorted->all();
/*
[
'first' => 'John',
'id' => 22345,
'last' => 'Doe',
]
*/
این متد تعداد دلخواهی از دادههای یک آرایه را حذف میکند و سپس برمیگرداند.
$collection = collect([1, 2, 3, 4, 5]);
$chunk = $collection->splice(2);
$chunk->all();
// [3, 4, 5]
$collection->all();
// [1, 2]
این متد مجموع دادههای یک آرایه را برمیگرداند.
collect([1, 2, 3, 4, 5])->sum();
// 15
$collection = collect([
['name' => 'JavaScript: The Good Parts', 'pages' => 176],
['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
]);
$collection->sum('pages');
// 1272
این متد یک Collection را به یک آرایه تبدیل میکند.
$collection = collect(['name' => 'Desk', 'price' => 200]);
$collection->toArray();
/*
[
['name' => 'Desk', 'price' => 200],
]
*/
این متد یک Collection را به یک کد با فرمت Json تبدیل میکند.
$collection = collect(['name' => 'Desk', 'price' => 200]);
$collection->toJson();
// '{"name":"Desk", "price":200}'
این متد دادههایی که تنها یک بار تكرار شده است را برمیگرداند.
$collection = collect([1, 1, 2, 2, 3, 4, 2]);
$unique = $collection->unique();
$unique->values()->all();
// [1, 2, 3, 4]
$collection = collect([
['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
['name' => 'iPhone 5', 'brand' => 'Apple', 'type' => 'phone'],
['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
]);
$unique = $collection->unique('brand');
$unique->values()->all();
/*
[
['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
]
*/
$unique = $collection->unique(function ($item) {
return $item['brand'].$item['type'];
});
$unique->values()->all();
/*
[
['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
]
*/
این متد دادههایی با شرایطی که وارد میکنیم را برمیگرداند.
$collection = collect([
['product' => 'Desk', 'price' => 200],
['product' => 'Chair', 'price' => 100],
['product' => 'Bookcase', 'price' => 150],
['product' => 'Door', 'price' => 100],
]);
$filtered = $collection->where('price', 100);
$filtered->all();
/*
[
['product' => 'Chair', 'price' => 100],
['product' => 'Door', 'price' => 100],
]
*/
$collection = collect([
['name' => 'Jim', 'deleted_at' => '2019-01-01 00:00:00'],
['name' => 'Sally', 'deleted_at' => '2019-01-02 00:00:00'],
['name' => 'Sue', 'deleted_at' => null],
]);
$filtered = $collection->where('deleted_at', '!=', null);
$filtered->all();
/*
[
['name' => 'Jim', 'deleted_at' => '2019-01-01 00:00:00'],
['name' => 'Sally', 'deleted_at' => '2019-01-02 00:00:00'],
]
*/
این متد دادههایی که بین دو مقدار خاص هستند را برمیگرداند.
$collection = collect([
['product' => 'Desk', 'price' => 200],
['product' => 'Chair', 'price' => 80],
['product' => 'Bookcase', 'price' => 150],
['product' => 'Pencil', 'price' => 30],
['product' => 'Door', 'price' => 100],
]);
$filtered = $collection->whereBetween('price', [100, 200]);
$filtered->all();
/*
[
['product' => 'Desk', 'price' => 200],
['product' => 'Bookcase', 'price' => 150],
['product' => 'Door', 'price' => 100],
]
*/
در این مقاله بهطور خلاصه و کاربردی به بررسی Collectionهای موجود در لاراول پرداختیم و با این خاصیت فوقالعاده لاراول تا حدود زیادی آشنا شدیم. اگر در این مورد سوال یا نظری داشتید خوشحال میشویم که با ما و کاربران سون لرن به اشتراک بگذارید.
اگر به یادگیری بیشتر لاراول علاقه دارید میتوانید در دوره آموزش لاراول کاربردی (بسته پروژه محور) شرکت کنید، این دوره شامل ۱۲ پروژه کاربردی و پر استفاده در دنیای واقعی است، که تمامی پروژهها به صورت کامل برنامه نویسی خواهند شد، تا دانشجو بتواند با روند ایجاد و تکمیل پروژه به صورت کامل آشنا شود.