ورود به سايت


رمز عبور را فراموش کردم ؟
ثبت نام سريع
نام کاربری :
رمز عبور :
تکرار رمز :
موبایل :
ایمیل :
نام اصلی :
کد امنیتی :
 
کد امنیتی
 
بارگزاری مجدد
آخرين ارسالي ها
آموزش Image Grid تاريخ : یکشنبه 17 مرداد 1400
طراحی شبکه تصاویر واکنش گرا تاريخ : سه شنبه 29 تیر 1400
آموزش ساخت تصاویر لایت باکس تاريخ : دوشنبه 28 تیر 1400
آموزش ساخت Image Modal با استفاده از HTML و CSS3 تاريخ : چهارشنبه 23 تیر 1400
آموزش ساخت گالری اسلاید شو برای سایت تاريخ : سه شنبه 22 تیر 1400
آموزش ساخت اسلايدشو براي وبسايت تاريخ : سه شنبه 15 تیر 1400
آموزش ساخت دکمه Back to Top برای صفحات وب تاريخ : سه شنبه 18 خرداد 1400
گرد کردن گوشه دکمه ها با CSS تاريخ : دوشنبه 17 خرداد 1400
آموزش ساخت دکمه با متن تاريخ : چهارشنبه 12 خرداد 1400
آموزش ساخت دکمه های تمام عرض در سایت تاريخ : دوشنبه 10 خرداد 1400
پشتیبانی انلاین
سلام دوست من به سايت آموزش برنامه نویسی خوش آمديد لطفا براي استفاده از تمامي امکانات

دانلود فايل , شرکت در انجمن و گفتگو با ساير اعضا در سايت ثبت نام کنيد





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

 

 

بکارگیری پارامترهای تابع در زبان سی شارپ

در درس قبلی، به طور کامل نحوه کار با تابع ها در سی شارپ و فراخوانی و استفاده آن ها را آموزش دادیم. تا حدودی به آموزش نحوه تعیین و ارسال پارامترهای تابع هم پرداختیم. اما در این درس به صورت اختصاصی قابلیت ها و کارکردهای پارامترها را بررسی خواهیم کرد.
اولین چیزی که به بررسی آن خواهیم پرداخت، تغییردهنده های ref و out یا modifiers هستند. زبان سی شارپ همانند اکثر زبان های برنامه نویسی دیگر، بین متغیرهای ارسال با مقدار “by value” و ارسال با رفرنس “by refrence” تفاوت قائل می شود.
حالت پیش فرض در زبان سی شارپ، ارسال با مقدار یا “by value” است. این حالت به معنای آن است که وقتی شما یک متغیر را به تابع ای به عنوان پارامتر ارسال می کنید، درواقع یک کپی از آن شی را می فرستید و نه رفرنس به آدرس عمل واقعی متغیر. از طرف دیگر این کار به این معنی است که شما می توانید تغییرات و عملیات مورد نظر خود را بر روی متغیر پارامتر ارسالی انجام دهید. بدون این که شی اصلی آن متغیر را در حافظه دستکاری نمایید و به عبارت دیگر هر کاری بر روی پارامتر در درون تابع انجام می دهید، بر روی نسخه کپی آن اجرا می شود نه متغیر اصلی. با استفاده از واژه های کلیدی ref و out می توانید عملکرد فوق را تغییر داده و نسخه اصلی یک متغیر را به جای مقدار آن به تابع ارسال نمایید.

 

دوره آموزش سی شارپ : آموزش ref modifier

کد مثال زیر را مطالعه نمایید :

static void Main(string[] args)
{
    int number = 20;
    AddFive(number);
    Console.WriteLine(number);
    Console.ReadKey();
}
static void AddFive(int number)
{
    number = number + 5;
}


در کد مثال فوق، یک متغیر عددی به نام number از نوع integer تعریف کرده و مقدار 20 را به آن می دهیم. سپس این متغیر را به تابع AddFive() ارسال نموده سپس مقدار 5 واحد را به آن اضافه می کند. اما آیا متغیر واقعی number تغییر می کند؟
جواب خیر است، مقدار 5 به نسخه کپی متغیر number اضافه شده و فقط درون تابع مورد اشاره تغییر کرده است. زیرا ما یک نسخه کپی از متغیر number را ارسال کرده ایم، نه رفرنس به شی اصلی آن. این روش حالت پیش فرض در سی شارپ بوده و در بیشتر موارد مقصود ما هم همین است.
اما اگر بخواهید مقدار شی اصلی متغیر number را تغیر دهید، بایستی کلید واژه ref را همانند کد زیر به پارامتر اضافه نمایید :

static void Main(string[] args)
{
    int number = 20;
    AddFive(ref number);
    Console.WriteLine(number);
    Console.ReadKey();
}
static void AddFive(ref int number)
{
    number = number + 5;
}

 

 

همانطور که در کد فوق مشاهده می کنید، ما علاوه بر این که در هنگام تعریف تابع، واژه کلیدی ref را به کار برده ایم، در هنگام فراخوانی تابع هم استفاده شده است.
اگر برنامه فوق را اجرا کنید، خواهید دید که مقدار اصلی متغیر number تغییر کرده است، نه نسخه کپی آن.

 

آموزش CSharp : آموزش تغییر دهنده out modifier

تغییردهنده out modifier بسیار شبیه ref عمل می کند. هر دو آن ها باعث می شود تا نسخه اصلی و رفرنس متغیر به عنوان پارامتر ارسال شود و نه مقدار آن. اما دارای دو تفاوت عمده با هم هستند :

  1. متغیری که به ref modifier ارسال می شود، حتما بایستی قبل از فراخوانی تابع مقداردهی اولیه شده باشد. اما این مورد درباره out صورت نکرده و شما می توانید یک متغیر مقداردهی نشده را به out ارسال کنید.
  2. از طرف دیگر شما نمی توانید بدون این که به یک متغیر out مقدار بدهید، تابع مورد نظر خود را به پارامتر out فراخوانی کنید. درست است که می توانید یک متغیر مقداردهی اولیه نشده را به یک تابع به عنوان out Parameter ارسال کنید، اما برای استفاده از آن در بدنه تابع، بایستی مقدار جدیدی را برای آن تعریف کنید.

 

 

آموزش زبان سی شارپ : آموزش تغییر دهنده Params modifier

 

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

staticvoidGreetPersons(string[] names){}

 

البته فراخوانی این نوع تابع ها کمی پیچیده تر از حالت معمولی است، به صورت زیر :

GreetPersons(newstring[]{"John","Jane","Tarzan"});

 

روش فوق کاملا درست است، اما می توان با استفاده از واژه کلیدی Params آن را به صورت زیر بهتر نوشت :

staticvoidGreetPersons(paramsstring[] names){}

 

کد فراخوانی فوق همانند فراخوانی به صورت زیر است :

GreetPersons("John","Jane","Tarzan");

 

مزیت دیگر استفاده از کلید واژه Params این است که شما می توانید پارامترهای خالی (2re, Parameters) را هم به تابع ارسال کنید.
در هنگام استفاده از Params، تابع می تواند انواع دیگری از پارامترها را نیز دریافت کند، منتهی پارامترهای Params بایستی در انتها تعریف شوند. از طرف دیگر فقط از یک پارامتر Params در تعریف و فراخوانی هر تابع می توان استفاده کرد.
کد مثال زیر، مثال کاملی از نحوه استفاده از Params در سی شارپ است :

static void Main(string[] args)
{
    GreetPersons(0);
    GreetPersons(25, "John", "Jane", "Tarzan");
    Console.ReadKey();
}
static void GreetPersons(int someUnusedParameter, params string[] names)
{
    foreach(string name in names)
        Console.WriteLine("Hello, " + name);
}

 

 

با دیگر مقاله های آموزش سی شارپ همراه ما باشید..



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 31


امروز با پست جدیدی از سری پست های آموزش طراحی سایت همراه شما هستیم.

در این پست آرایه ها در جاوا اسکریپت را مورد بررسی قرار می دهیم.

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

با شناسه "demo"نمایش می دهیم. همان طور که در مثال زیر مشاهده می کنید، اولین خط ، آرایه ای به نام cars ایجاد می کند. دومین خط المانی که شناسه ی آن "demo"می باشد را یافته سپس آرایه را در "innerHTML" آن المان نمایش می دهد.

مثال:

 

نمونه یک

 

Saab,Volvo,BMW

 

 

var cars = ["Saab", "Volvo", "BMW"];

document.getElementById("demo").innerHTML = cars;

 

 

خودتان امتحان کنید. یک آرایه ایجاد کرده و مقادیری به آن تخصیص دهید.

 

نمونه دو

var cars = ["Saab", "Volvo", "BMW"];

فاصله و انتهای خط (line break) از هیچ اهمیتی برخوردار نیستند. یک تعریف (declaration) می تواند در چندین خط ادامه داشته باشد.

مثال:

 

نمونه سه

var cars = [

"Saab",

"Volvo",

"BMW"

];

توجه:

توجه داشته باشید که هیچ گاه پس از آخرین المان (در مثال بالا "BMW") ویرگول قرار ندهید، زیرا ممکن است در مرورگرهای مختلف نتایج متفاوتی ارائه دهد.

 

آرایه چیست ؟

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

var car1 = "Saab";‎

var car2 = "Volvo";‎

var car3 = "BMW";‎

چنانچه بخواهیم درون آیتم های فوق حلقه زده (آن ها را تکرار کرده) و ماشین مورد نظر را پیدا کنیم چه اتفاقی رخ می دهد؟ اگر تعداد ماشین ها 3 تا نه بلکه 300 تا بود چه اتفاقی رخ می داد؟ این مسئله با بهره گیری از آرایه حل می شود. یک آرایه همان طور که پیش تر ذکر کردیم قادر است چندین مقدار را تحت نام یکسان در خود ذخیره کرده و از طریق اندیس به آن مقادیر دسترسی پیدا کند.

ایجاد آرایه

استفاده از یک آرایه ی متنی (array literal) بهترین و نیز آسان ترین روش برای ایجاد یک آرایه ی جاوا اسکریپت می باشد.

 

دستور نگارش (syntax)

var array-name = [item1, item2, ...];‎

مثال:

var cars = ["Saab", "Volvo", "BMW"];‎

 

استفاده از کلید واژه ی new

مثال زیر نیز یک آرایه ایجاد کرده و به آن مقادیری را تخصیص می دهد.

مثال:

 

نمونه چهار

var cars = new Array("Saab", "Volvo", "BMW");

نکته:

دو مثال بالا هر دو یک کار یکسان را انجام می دهند. نیازی به استفاده از new Array() وجود ندارد. برای آسانی، قابلیت خوانایی بیشتر و نیز افزایش سرعت اجرا توصیه می کنیم از نمونه ی اول استفاده کنید.

 

دسترسی به المان های آرایه

برای دسترسی به المان مورد نظر در آرایه از شماره ی اندیس کمک می گیریم. دستور زیر نحوه ی دسترسی به مقدار اولین المان را نمایش می هد.

var name = cars[0];‎

دستور زیر اولین المان را اصلاح می کند.

cars[0] = "Opel";‎

توجه:

دقت داشته باشید که [0] اولین المان محسوب می گردد و [1] دومین شمارنده ی آرایه ها در جاوا اسکریپت از صفر آغاز می شود.

 

امکان داشتن چندین شی مختلف در یک آرایه

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

myArray[0] = Date.now;‎

myArray[1] = myFunction;‎

myArray[2] = myCars;

 

آرایه یک شی است

آرایه یک نوع خاص شی است. عملگر (operator) typeof در جاوا اسکریپت (برای آرایه) "object" بازمی گرداند. آریه برای دسترسی به المان های خود از شماره کمک می گیرد. به عنوان مثال person[0] المان John را باز می گرداند.

Arrayمثال:

 

نمونه پنج

var person = ["John", "Doe", 46];

اشیا با استفاده از اسم (name) به اعضای ("member") خود دستیابی پیدا می کنند. برای مثال person.firstName المانJohn را بازیابی می کند.

objectمثال:

 

نمونه شش

var person = {firstName:"John", lastName:"Doe", age:46};

 

خواص property ها (خواص) و method های (توابع) مربوط به آرایه

اگر به مثال زیر دقت کنید متوجه می شوید که length property تعداد المان های موجود در cars را برمی گرداند و تابع sort()، cars را به ترتیب حروف الفبا مرتب سازی (sort) می کند.

مثال:

var x = cars.length; // The length property returns ‎the number of elements in cars

var y = cars.sort(); // The sort() method sort cars in ‎alphabetical order

 

تشریح خاصیت length

دستور length property یک آرایه، طول یا تعداد المان های موجود در یک آرایه را باز گردانی می کند.

مثال:

 

نمونه هفت

var fruits = ["Banana", "Orange", "Apple", "Mango"];

fruits.length; // the length of fruits is 4

 

افزودن المان جدید به یک آرایه

آسان ترین روش برای افزورن یک element جدید به آرایه، استفاده از تابع (method) push می باشد.

مثال:

 

نمونه هشت

var fruits = ["Banana", "Orange", "Apple", "Mango"];

fruits.push("Lemon"); // adds a new element (Lemon) to fruits

 

همچنین می توان این کار را با بهره گیری از length property انجام داد.

مثال:

 

نمونه نه

var fruits = ["Banana", "Orange", "Apple", "Mango"];

fruits[fruits.length] = "Lemon"; // adds a new element (Lemon) to fruits

 

ایجاد یک حلقه در آرایه (تکرار المان های یک آرایه به تعداد دفعات معین)

در loop for مجموعه دستورالعمل ها به تعداد معلوم و مورد نياز، تکرار می شوند. یکی از بهترین روش های تکرار المان های یک آرایه استفاده از حلقه ی بیان شده است.

مثال:

 

نمونه ده

var index;

var fruits = ["Banana", "Orange", "Apple", "Mango"];

for (index = 0; index < fruits.length; index++) {

text += fruits[index];

}

 

آرایه ی شرکت پذیر چیست (associative arrays)؟

بسیاری از زبان های برنامه نویسی کنونی از آرایه های با اندیس های نام گذاری شده پشتیبانی می کنند. آرایه هایی که اندیس های آن ها نام گذاری شده، آرایه های شرکت پذیر یا (hashes) associative arrays نامیده می شوند. جاوا اسکریپت از آرایه هایی که دارای named index (اندیس نام گذاری شده) هستند پشتیبانی نمی کند. در عوض این زبان از قابلیت numbered indexes (اندیس های شماره گذاری شده) پشتیبانی می کند.

مثال:

 

نمونه یازده

var person = [];

person[0] = "John";

person[1] = "Doe";

person[2] = 46;

var x = person.length; // person.length will return 3

var y = person[0]; // person[0] will return "John"

توجه:

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

مثال:

 

نمونه دوازده

var person = [];

person["firstName"] = "John";

person["lastName"] = "Doe";

person["age"] = 46;

var x = person.length; // person.length will return 0

var y = person[0]; // person[0] will return undefined

 

تشریح تفاوت بین آرایه (array) و شی (object)

همان طور که پیش تر شرح داده شد، در جاوا اسکریپت آرایه ها از اندیس های شماره دار استفاده می کنند. اشیا (object) نیز از اندیس های نام دار (named indexes) استفاده می کنند.

 

چه زمانی باید از array استفاده کرد و چه زمانی از object؟

جاوا سکرپیت JavaScript از آرایه های شرکت پذیر (associative array) پشتیبانی نمی کند. اگر می خواهید اسم المان ها از نوع رشته (نوشته یا متن) باشد، در آن صورت به طور حتم باید از object استفاده کنید. چنانچه مایلید اسم المان از نوع عددی یا شماره باشد، باید از array استفاده کنید. تا حد ممکن سعی کنید از بکار گیری constructor (سازنده) پیش فرض و توکار ()JavaScript،new Array خودداری کنید. بجای استفاده از روش منسوخ بالا می توانید از روش نوین [] بهره بگیرید. هر دو دستور کاملا متفاوت نام برده، آرایه ای تهی به نام points ایجاد می کنند.

var points = new Array(); // Bad

var points = []; // Good

بار دیگر هر دو دستور آرایه ای ایجاد می کنند که دربردارنده ی 6 عدد است.

 

نمونه سیزده

var points = new Array(40, 100, 1, 5, 25, 10) // Bad

var points = [40, 100, 1, 5, 25, 10]; // Good

استفاده از کلیدواژه ی new برای ایجاد آراِیه ی جدید به دلیل طولانی و پیچیده تر کردن کد منسوخ تلقی تلقی می گردد.

var points = new Array(40, 100);  // Creates an array with two elements (40 and 100)

ببینید در صورت حذف کردن یکی از المان ها چه اتفاقی رخ می دهد!

 

نمونه چهارده

var points = new Array(40);       // Creates an array with 40 undefined elements !!!!!

 

چگونه یک آرایه را تشخیص دهیم؟

یکی از سوال هایی که به طور متدوال مطرح می شود این است که چگونه می توان تشخیص داد آیا یک متغیر آرایه هست یا خیر؟ یکی از مشکل هایی که با آن مواجه می شویم، این است که عملگر typeof "object" باز می گرداند.

 

نمونه پانزده

var fruits = ["Banana", "Orange", "Apple", "Mango"];

typeof fruits; // typeof returns object

عملگر مزبور به این خاطر "object" برمی گرداند که یک JavaScript array یا آرایه ی جاوا اسکریپت خود یک شی است. جهت رفع این مشکل توصیه می کنیم isArray() function خود را ایجاد کنید.

 

نمونه شانزده

function isArray(myArray) {

return myArray.constructor.toString().indexOf("Array") > -1;

}

تابع function (تابع) بالا همیشه در صورتی که آرگومان مورد نظر یک آرایه باشد، مقدار true باز می گرداند و یا اگر بخواهیم دقیق تر توضیح بدیم اگر نوع ورودی تابع از نوع "[object array]" باشد مقدار صحیح (true) برمی گرداند.

آموزش طراحی سایت ادامه دارد



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 29


در این مقاله از سری مقاله های آموزش پایتون به معرفی multi threaded در پایتون می پردازیم :

اجرای همزمان چندین thread به منزله اجرای همزمان چندین برنامه در آن واحد است که مزایای زیر را به دنبال دارد :

  • چندین thread که در بستر یک پردازه یا فرایند (process) اجرا شده و data space یکسانی را دارند، می توانند داده ها را بهتر با یکدیگر به اشتراک گذاشته و بایکدیگر تعامل بهتری داشته باشند، نسبت به زمانی که این thread ها در فرایندهای مجزا قرار دارند.
  • گاهی thread ها را پردازه یا فرایندهای سبک می نامند که سربار و memory overhead کمتری نسبت به فرایندهای واقعی داشته و کم هزینه تر می باشند.

هر thread یک نقطه ی آغاز،یک ترتیب یا توالی اجرا و یک نقطه ی پایان دارد. علاوه بر آن، یک instruction pointer دارد که دقیقا مشخص می کند برنامه در کجای بستر (context) جاری در حال اجرا بود و به کدام مرحله و نقطه اجرای دستور رسیده است.

  • می توان thread را مختل یا متوقف (pre-empt) کرد.
  • می توان thread را در حالی که دیگر thread ها فعال هستند، به طور موقت به حالت تعلیق درآورد. از این کار تحت عنوان yielding نیز یاد می شود.

 

آموزش Python : راه اندازی و اجرای thread جدید

جهت آغاز یک thread جدید، بایستی متد زیر که داخل ماژول thread کپسوله شده را فراخوانی نمایید :

thread.start_new_thread ( function, args[, kwargs] )

به وسیله ی این متد می توانید به روش سریع و کارا در هر دو محیط ویندوز و لینوکس thread های جدید ایجاد نمایید.

متد مورد نظر بلافاصله بازگشته و thread فرزند آغاز می شود که متعاقبا function را با پارامتر args صدا می زند. زمانی که function به return می رسد، thread خاتمه می یابد.

در این تابع، پارامتر args مجموعه ی چندتایی از آرگومان ها (tuple) است. اگر می خواهید تابع را بدون آرگومان صدا بزنید، بایستی یک tuple خالی به عنوان پارامتر ارسال کنید. kwargs یک آرگومان از نوع dictionary تشکیل شده از کلیدواژه ها بوده و استفاده از آن اختیاری است.

مثال :

#!/usr/bin/python
import thread
import time
# Define a function for the thread
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print "%s: %s" % ( threadName, time.ctime(time.time()) )
# Create two threads as follows
try :
   thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print "Error: unable to start thread"
while 1:
   pass

خروجی :

Thread-1: Thu Jan 22 15:42:17 2009
Thread-1: Thu Jan 22 15:42:19 2009
Thread-2: Thu Jan 22 15:42:19 2009
Thread-1: Thu Jan 22 15:42:21 2009
Thread-2: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:23 2009
Thread-1: Thu Jan 22 15:42:25 2009
Thread-2: Thu Jan 22 15:42:27 2009
Thread-2: Thu Jan 22 15:42:31 2009
Thread-2: Thu Jan 22 15:42:35 2009

اگرچه توصیه می شود که برای پردازش موازی سطح پایین (low-level threading) از ماژول thread استفاده نمایید، با این وجود ماژول مزبور در مقایسه با ماژول جدید برنامه نویسی موازی (threading module) از قابلیت های بسیار کمتری برخوردار است.

 

آموزش برنامه نویسی پایتون : ماژول Threading

ماژول جدیدتری که برای برنامه نویسی موازی همراه با ویرایش 2.4 زبان Python ارائه شد، قابلیت های بسیار بیشتر و سطح بالاتری جهت بهره گیری از پردازش موازی و thread ها در اختیار برنامه نویس قرار داد.

ماژول threading علاوه بر تمامی توابع ماژول قبلی (thread)، تعدادی متد نوین و کارای دیگر جهت پیاده سازی مفهوم برنامه نویسی موازی ارائه می دهد.

  • متد threading.activeCount() : تعداد آبجکت های thread که فعال و در حال اجرا هستند را بازگردانی می نماید.
  • متد threading.currentThread() : همان thread جاری را به عنوان خروجی برمی گرداند.

علاوه بر متدها، ماژول نام برده کلاس Thread را شامل می شود که threading و پردازش موازی را پیاده سازی می کند. متدهایی که که کلاس Thread در اختیار توسعه دهنده قرار می دهد، به شرح زیر می باشد :

  • متد ()run : متد جاری در واقع entry point یا نقطه ی شروع اجرای thread می باشد.
  • متد start() : thread را با فراخوانی تابع run() راه اندازی و اجرا می کند.
  • متد ([Join ([time : متد join() منتظر می ماند تا thread ها خاتمه یابند.
  • متد ()isAlive : متد حاضر بررسی می کند آیا یک thread هنوز در حل اجرا است یا خیر.
  • متد ()getName : متد جاری اسم آبجکت thread را بازیابی می کند.
  • متد ()setName : این متد اسم thread را مقداردهی می کند.

 

دوره آموزش پایتون : ساخت آبجکت Thread از ماژول Threading

به منظور پیاده سازی یک thread جدید از ماژول threading، کافی است مراحل زیر را دنبال نمایید:

  • یک کلاس مشتق از کلاس Thread ایجاد نمایید (از آن ارث بری کنید).
  • متد _[(init_(self[,args را جهت تزریق آرگومان های بیشتر به کلاس، بازنویسی (override) نمایید.
  • در پایان، متد [(run(self[,args را پیاده سازی و در بدنه ی آن مشخص کنید که thread به هنگام اجرا چه عملیاتی را انجام دهد.

پس از ایجاد کلاس مشتق (ارث بری) از Thread، می توانید یک نمونه از آن ایجاد کرده و سپس با فراخوانی متد start() یک thread یا ریزپردازه ی دیگر آغاز نمایید که متعاقبا متد run() را صدا می زند.

مثال :

#!/usr/bin/python
import threading
import time
exitFlag = 0
class myThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        print "Starting " + self.name
        print_time(self.name, self.counter, 5)
        print "Exiting " + self.name
def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            threadName.exit()
        time.sleep(delay)
        print "%s: %s" % (threadName, time.ctime(time.time()))
        counter -= 1
# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# Start new Threads
thread1.start()
thread2.start()
print "Exiting Main Thread"

زمانی که کد فوق به اجرا گذاشته می شود، خروجی به صورت زیر خواهد بود :

Starting Thread-1
Starting Thread-2
Exiting Main Thread
Thread-1: Thu Mar 21 09:10:03 2013
Thread-1: Thu Mar 21 09:10:04 2013
Thread-2: Thu Mar 21 09:10:04 2013
Thread-1: Thu Mar 21 09:10:05 2013
Thread-1: Thu Mar 21 09:10:06 2013
Thread-2: Thu Mar 21 09:10:06 2013
Thread-1: Thu Mar 21 09:10:07 2013
Exiting Thread-1
Thread-2: Thu Mar 21 09:10:08 2013
Thread-2: Thu Mar 21 09:10:10 2013
Thread-2: Thu Mar 21 09:10:12 2013
Exiting Thread-2

 

آموزش Python : همزمان سازی thread ها

ماژول threading که در بالا به آن اشاره کردیم، یک مکانیزم اعمال قفل با قابلیت پیاده سازی آسان در اختیار توسعه دهنده قرار می دهد که به واسطه ی آن می توان به راحتی thread ها و اجرای آن ها را هماهنگ ساخت. جهت ساخت و اعمال قفل جدید کافی است متد Lock() فراخوانی شود که در خروجی نمونه ی جدید از آبجکت lock را بازگردانی می نماید.

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

زمانی که مقدار پارامتر blocking برابر 0 باشد، اگر قفل یا lock بر روی thread اعمال شد،متد با 1 و اگر نشد با 0 برمی گردد. هنگامی که blocking روی 1 تنظیم شده باشد، thread مسدود (block) شده و منتظر می ماند تا lock آزاد شود.

زمانی که متد release() از نمونه ی جدید lock صدا خورده می شود، lock یا قفل اعمال شده بر روی thread که دیگر کاربردی ندارد، آزاد می شود.

مثال :

#!/usr/bin/python
import threading
import time
class myThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        print "Starting " + self.name
        # Get lock to synchronize threads
        threadLock.acquire()
        print_time(self.name, self.counter, 3)
        # Free lock to release next thread
        threadLock.release()
def print_time(threadName, delay, counter):
    while counter:
        time.sleep(delay)
        print "%s: %s" % (threadName, time.ctime(time.time()))
        counter -= 1
threadLock = threading.Lock()
threads = []
# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# Start new Threads
thread1.start()
thread2.start()
# Add threads to thread list
threads.append(thread1)
threads.append(thread2)
# Wait for all threads to complete
for t in threads:
    t.join()
print "Exiting Main Thread"

خروجی :

Starting Thread-1
Starting Thread-2
Thread-1: Thu Mar 21 09:11:28 2013
Thread-1: Thu Mar 21 09:11:29 2013
Thread-1: Thu Mar 21 09:11:30 2013
Thread-2: Thu Mar 21 09:11:32 2013
Thread-2: Thu Mar 21 09:11:34 2013
Thread-2: Thu Mar 21 09:11:36 2013
Exiting Main Thread

 

آموزش پایتون : پیاده سازی queue بوسیله multi thread در پایتون

ماژول Queue به توسعه دهنده این امکان را می دهد تا یک آبجکت queue جدید ایجاد کند که همزمان چندین آیتم را به طور صف بندی شده در خود کپسوله می نماید. برای مدیریت Queue می توانید از توابع زیر استفاده نمایید :

  • تابع get() : متد جاری یک آیتم را حذف و از queue بازیابی می کند.
  • تابع put() : این متد یک آیتم جدید را به queue اضافه می کند.
  • تابع qsize() : تعداد آیتم هایی که در زمان حاضر داخل صف قرار دارند را به عنوان خروجی بازمی گرداند.
  • تابع empty() : چنانچه صف یا آبجکت queue خالی بود، مقدار بولی True و در غیر این صورت False را بازمی گرداند.
  • تابع full() : چنانچه آبجکت queue ظرفیت خالی نداشت، مقدار بولی True و در غیر این صورت False را بازگردانی می نماید.

مثال :

#!/usr/bin/python
import Queue
import threading
import time
exitFlag = 0
class myThread (threading.Thread):
    def __init__(self, threadID, name, q):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.q = q
    def run(self):
        print "Starting " + self.name
        process_data(self.name, self.q)
        print "Exiting " + self.name
def process_data(threadName, q):
    while not exitFlag:
        queueLock.acquire()
        if not workQueue.empty():
            data = q.get()
            queueLock.release()
            print "%s processing %s" % (threadName, data)
        else:
            queueLock.release()
        time.sleep(1)
threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = Queue.Queue(10)
threads = []
threadID = 1
# Create new threads
for tName in threadList:
    thread = myThread(threadID, tName, workQueue)
    thread.start()
    threads.append(thread)
    threadID += 1
# Fill the queue
queueLock.acquire()
for word in nameList:
    workQueue.put(word)
queueLock.release()
# Wait for queue to empty
while not workQueue.empty():
    pass
# Notify threads it's time to exit
exitFlag = 1
# Wait for all threads to complete
for t in threads:
    t.join()
print "Exiting Main Thread"

نتیجه :

Starting Thread-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread

با دیگر مقالات آموزش پایتون همراه ما باشید...



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 46

آموزش جاوا-آموزش حلقه while

تاريخ: امروز, : جمعه 16 آبان 1399 نويسنده: http://tahlilgardadeh.rozblog.com/user-admin

موضوع: آموزش جاوا ,


 

سلام عزیزان... با آموزش جاوا همراه ما باشید

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

while(condition){

//code to be executed

}

 

مثال کاربردی:

public class WhileExample { 

public static void main(String[] args) { 

    int i=1; 

    while(i<=10){ 

        System.out.println(i); 

    i++; 

    } 

خروجی:

1

2

3

4

5

6

7

8

9

10

 

حلقه ی while بی نهایت در Java

آموزش جاوا : اگر مقدار بولی true را به عنوان پارامتر به دستور while پاس دهید، این حلقه مجموعه دستورات را تا بی نهایت تکرار می کند.

دستور استفاده از حلقه ی while بی نهایت:

while(true){

//code to be executed

}

مثال کاربردی:

public class WhileExample2 {

public static void main(String[] args) {

while(true){

System.out.println("infinitive while loop");

}

}

}

خروجی:

infinitive while loop

infinitive while loop

infinitive while loop

infinitive while loop

infinitive while loop

ctrl+c

حال جهت خروج از برنامه و خاتمه دادن اجرای حلقه ی بی نهایت، لازم است کلیدهای ctrl+c را همزمان فشار دهید.

 

آموزش Java – حلقه ی do-while در Java

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

دستور استفاده:

do{

//code to be executed

}while(condition)

 

مثال کاربردی:

public class DoWhileExample {

public static void main(String[] args) {

int i=1;

do{

System.out.println(i);

i++;

}while(i<=10);

}

}

خروجی:

1

2

3

4

5

6

7

8

9

10

 

حلقه ی do-while بی نهایت

اگر مقدار بولی true را به عنوان پارامتر به دستور do-while ارسال نمایید، مجموعه دستورات مورد نظر تا بی نهایت تکرار می شوند.

دستور استفاده:

do{

//code to be executed

}while(true);

مثال کاربردی:

public class DoWhileExample2 {

public static void main(String[] args) {

do{

System.out.println("infinitive do while loop");

}while(true);

}

}

خروجی:

infinitive do while loop

infinitive do while loop

infinitive do while loop

ctrl+c

اکنون جهت خروج از برنامه کافی است کلیدهای ctrl+c را فشار دهید.

آموزش جاوا ادامه دارد



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 29

آموزش ارسال ایمیل با پایتون

تاريخ: امروز, : چهارشنبه 14 آبان 1399 نويسنده: http://tahlilgardadeh.rozblog.com/user-admin

موضوع: آموزش پایتون ,


در این مقاله به آموزش ارسال ایمیل با پایتون و چگونگی استفاده از SMTP در پایتون را با یکدیگر مورد بررسی قرار می دهیم..

 

فرستادن ایمیل با SMTP در پایتون

عبارت Simple Mail Transfer Protocol یا به اختصار SMPT (پروتکل ارسال و انتقال ایمیل) معرفی پروتکلی است که ارسال ایمیل و آدرس دهی (routing) آن بین سرویس دهنده های ایمیل را مدیریت می کند.

پایتون ماژولی به نام smtplib در اختیار توسعه دهنده قرار می دهد که یک آبجکت حاوی اطلاعات session ( اطلاعات جلسه ی کاری کاربر یا client session object) را در خود به صورت کپسوله داشته و می توان از آن برای ارسال ایمیل به هر دستگاه آنلاینی که listener daemon (برنامه ی ای که به رخدادها گوش داده و در پس زمینه فعالیت می کند) SMTP یا ESMTP بر روی آن فعال است، استفاده نمود. در زیر نحوه ی ساخت یک آبجکت SMTP ساده که بعده ها جهت ارسال ایمیل مورد استفاده قرار می گیرد، را مشاهده می کنید :

import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

 

در زیر شرح کاربرد هر یک از پارامترهای عنوان شده در قطعه کد بالا را مشاهده می کنید :

  • پارامتر host : پارامتر جاری همان میزبان یا هاستی است که به عنوان سرویس دهنده ی SMTP شما ایفای نقش می کند (SMTP server شما بر روی آن اجرا می شود). شما می توانید مقدار این پارامتر را آدرس IP میزبان یا اسم دامنه همچون tahlildadeh.com تنظیم نمایید. استفاده از این آرگومان اختیاری است.
  • پارامتر port : در صورت مقداردهی آرگومان اول، لازم است یک پورت یا شماره ی درگاه نیز مشخص نمایید که SMPT Server به آن گوش می دهد. شماره ی این پورت معمولا 25 می باشد.
  • پارامتر local_hostname : چنانچه SMPT Server شما بر روی دستگاه محلی (کامپیوتر شخصی) مستقر و فعال باشد، در آن صورت کافی است مقدار این پارامتر را localhost قرار دهید.

در آبجکت SMPT متدی تعبیه شده به نام sendmail که اغلب، توسعه دهنده با استفاده از آن کار عملیات ارسال پیغام مورد نظر را به انجام می رساند. متد نام برده در کل سه پارامتر ورودی دریافت می کند که به شرح زیر می باشند :

  • پارامتر sender : یک مقدار رشته ای دربردارنده آدرس ارسال کننده پیغام.
  • پارامتر receivers : لیستی از رشته ها که هریک مختص به دریافت کننده ی مجزا می باشد.
  • پارامتر message : یک پیغام به صورت رشته و فرمت دهی شده بر اساس مشخصات و قواعد RFC ها.

مثال :

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

#!/usr/bin/python
import smtplib
sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']
message = """From: From Person
To: To Person
Subject: SMTP e-mail test
This is a test e-mail message.
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
   except SMTPException:
   print "Error: unable to send email"

 

در تمرین جاری، یک ایمیل ساده داخل متغیر message و کوتیشن سه تایی درج گردید و همان طور که می بینید، هدرها به روش صحیح فرمت دهی شده اند. هر ایمیل، سه هدر به ترتیب From ،To و Subject که به وسیله ویرگول از هم و به وسیله خط سفید از بدنه پیغام جدا شده اند را شامل می شود.

به منظور ارسال ایمیل، ابتدا با استفاده از smtpObj به SMPT Server (سرویس دهنده ی سرور) مستقر بر روی دستگاه محلی (local) وصل شوید، سپس متد sendmail را فراخوانی کرده و پیغام، آدرس فرم و آدرس مقصد را به عنوان پارامتر به این متد ارسال نمایید (اگرچه فرم و آدرس داخل خود ایمیل گنجانده شده، با این حال از این مقدارها همیشه برای آدرس دهی یا route ایمیل استفاده نمی شود).

چنانچه شما برای ارسال ایمیل از SMPT Server که بر روی دستگاه شما (local) شما نصب و اجرا شده، استفاده نمی کنید، در آن صورت می توانید با استفاده از smtplib client به یک سرور SMPT راه دور متصل شوید. برای این منظور لازم است ارائه دهنده ی ایمیل جزئیات و اطلاعات mail server خروجی دهنده را در اختیار شما قرار داده باشد و شما نیز آن ها را به صورت زیر بکار ببرید، مگر اینکه برای ارسال ایمیل از یک سرویس آماده همچون Hotmail و Yahoo استفاده نمایید که در آن صورت نیازی به این اطلاعات نیست.

smtplib.SMTP('mail.your-domain.com', 25)

 

ارسال فایل ایمیل به صورت HTML با استفاده از Python

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

به هنگام ارسال یک ایمیل، می توان نوع فایل (Mime version)، نوع محتوا و مجموعه کاراکتری که باید به صورت یک ایمیل HTML ارسال شود را مشخص نمایید.

مثال :

در زیر کدی را مشاهده می کنید که محتوایی با فرمت HTML را به صورت ایمیل ارسال می کند :

#!/usr/bin/python
import smtplib
message = """From: From Person
To: To Person
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test
This is an e-mail message to be sent in HTML format
< b>This is HTML message.< /b>
< h1>This is headline.< /h1>
"""
try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)   
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

 

 

ارسال محتوا همراه با ایمیل در پایتون

جهت ارسال ایمیل با محتوای مختلط، لازم است مقدار هدر Content-type را برابر multipart/mixed قرار دهید. پس از آن، متن و محتوای الصاقی (attachment) را در boundaries دقیقا اعلان کنید. برای تعریف boundary، دو خط تیره (هایفن) و یک عدد منحصربفرد درج کنید که این بخش نباید در بدنه ی ایمیل یا بخش پیغام ظاهر شود. سپس یک boundary نهایی درج می کنید که نشانگر بخش پایانی ایمیل بوده و باید به دو خط تیره ختم شود. فایل های الصاق شده باید قبل از ارسال، به وسیله ی تابع pack("m") بر مبنای الگوریتم و روش کدگذاری base64 رمزنگاری شوند.

مثال :

در مثال زیر، فایل /tmp/test.txt به عنوان محتوای الصاقی همراه با ایمیل ارسال می شود :

#!/usr/bin/python
import smtplib
import base64
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)  # base64
sender = 'webmaster@tutorialpoint.com'
reciever = 'amrood.admin@gmail.com'
marker = "AUNIQUEMARKER"
body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person
To: To Person
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body,marker)
# Define the attachment section
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s
%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3
try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, reciever, message)
   print "Successfully sent email"
except Exception:
   print "Error: unable to send email"

 

با دیگر مقاله های ما در زمینه آموزش پایتون همراه ما باشید...



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 48

آموزش سی شارپ-آموزش توابع در C#

تاريخ: امروز, : دوشنبه 12 آبان 1399 نويسنده: http://tahlilgardadeh.rozblog.com/user-admin

موضوع: آموزش سی شارپ ,


به بخش جدید آموزش سي شارپ خوش آمدید.

یک تابع یا Function در C#، به شما امکان می دهد مجموعه ای از دستورات را درون یک ظرف مشخص قرار داده و در هر جای برنامه که لازم داشتید، با به کار بردن نام تابع آن ها را فراخوانی کنید. در برنامه نویسی پروژه ها، شما گاهی مجبور می شوید تا یک قطعه کد را در چندین محل مختلف مورد استفاده قرار دهید، در این حالت است که تابع ها (Function) به کمک شما می آیند. از طرف دیگر، به وسیله توابع شما می توانید کدهای پروژه خود را به بخش های مجزا و قابل تفکیک از هم تبدیل کنید.

آدرس صفحه وبی که میخواهید نمایش دهید را Paste کنید

 

در زبان C#، یک تابع (Function) به صورت کلی زیر تعریف می شود :

< visibility > < return type > < name > ( < parameters > )

{

< function code >

}

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

FunctionName ( Parameter1 , Parameter2  ,… ) ;

در کد مثال زیر یک تابع به نام Dostuff را فراخوانی کرده ایم :

public void DoStuff()

{

Console.WriteLine("I'm doing something...");

}

در کد تابع فوق، اولین بخش فراخوانی تابع، یعنی کلمه public، تعیین کننده میدان دید تابع در سطح برنامه بوده و تعیین آن اختیاری است. میدان دید یک تابع مشخص می کند آیا سایر توابع و کلاس های موجود در برنامه امکان مشاهده و دسترسی تابع مورد نظر را خواهند داشت یا خیر. Public به معنای عمومی بوده و یعنی سایر کلاس ها و توابع دیگر برنامه می توانند به تابع فوق دسترسی داشته باشند.

نکته :

اگر میدان دید برای یک تابع تعیین نشود، به صورت پیش فرض Private یا خصوصی در نظر گرفته می شود. Private تابع های هم کلاس تابع مورد نظر امکان دسترسی مستقیم به تابع را دارند.

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

public int AddNumbers(int number1, int number2)

{

int result = number1 + number2;

return result;

}

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

int result = AddNumbers(10, 5);

Console.WriteLine(result);

همانطور که اشاره کردیم، این تابع یک مقدار عددی را باز می گرداند. هنگامی که در یک تابع، هر نوع داده ای غیر از Void را تعیین می کنیم، به این معناست که تابع را مجبور نموده ایم تا یک مقدار برگشتی داشته باشد.

نکته :

اگر خط کد return را از کد مثال فوق بردارید، خواهی دید که در هنگام اجرای برنامه، کامپایلر بر بروی این تابع ارور داده و پیام زیر را صادر می کند :

'AddNumbers(int, int)': not all code paths return a value

پیام فوق به ما یادآوری می کند که تابع فوق، علی رغم این که یک مقدار خروجی برای آن در نظر گرفته شده، اما هیچ خروجی را بر نمی گرداند. اما می خواهیم خروجی تابع را کنترل کنید، می توانید کدی مثل کد زیر را به تابع اضافه کنید :

public int AddNumbers(int number1, int number2)

{

int result = number1 + number2;

if(result > 10)

{

return result;

}

}

اما باز هم پیام خطایی همانند مثال قبل صادر می شود، چرا؟ به این دلیل که هیچ ضمانتی وجود نداشته که شرط دستور if درست از آب در بیاید و برنامه خروجی داشته باشد (دستور return اجرا بشود). می توانید مشکل فوق را با تعیین یک مقدار پیش فرض برای عبارت return به صورت زیر حل کنید :

public int AddNumbers(int number1, int number2)

{

int result = number1 + number2;

if(result > 10)

{

return result;

}

return 0;

}

کد اضافه شده فوق، مشکل برنامه ما را حل کرده و از طرف دیگر نشان می دهد می توانیم بیش از یک دستور return را در بدنه تابع خود تعریف کنیم. به محض اجرای دستور return در هر جای کد برنامه، خروجی تابع ارسال شده و اجرای مابقی دستورات تابع لغو می شود. در مثال فوق، اگر مقدار متغیر خروجی return بزرگتر از 10 باشد، هیچ گاه دستور return 0; اجرا نمی شود.

آموزش سي شارپ ادامه دارد



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 28

آموزش برنامه نویسی شبکه در پایتون

تاريخ: امروز, : یکشنبه 11 آبان 1399 نويسنده: http://tahlilgardadeh.rozblog.com/user-admin

موضوع: آموزش پایتون ,


امروز با آموزش برنامه نویسی شبکه در پایتون (سوکت نویسی) همراه شما هستیم..

 

شرحی بر مفهوم Socket

سوکت ها (Sockets) در واقع endpoint های موجود در یک کانال ارتباطی دو طرفه هستند. سوکت ها می توانند در بستر یک فرایند یا بین دو فرایند در دستگاه واحد و یا حتی چندین فرایند در دستگاه های مستقر در قاره و نقاط جغرافیایی مختلف با یکدیگر تبادل داده داشته باشند. از دیدگاه kernel و هسته سیستم عامل، socket صرفا نقطه نهایی تبادل داده و ارتباط می باشد. از دیدگاه اپلیکیشن و برنامه تحت شبکه، socket یک توصیف گر و شناسه فایل که به آن امکان و مجوز درج و خواندن داده در / از شبکه را می دهد، قلمداد می شود. در واقع Socket ترکیبی از آدرس دستگاه (IP) و آدرس درگاه (port number) می باشد.

سوکت ها بر روی انواع کانال های ارتباطی قابل پیاده سازی می باشند که از جمله آن ها می توان به Unix domain socket، TCP، UDP و غیره ... اشاره کرد. کتابخانه socket کلاس های اختصاصی ارائه می دهد که علاوه بر انتقال داده های معمولی، Interface های از نوع generic که دیگر انواع عملیات انتقال و غیره را تحت پوشش قرار می دهد، مدیریت می نماید.

 

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

  • عبارت domain :خانواده پروتکل هایی که به عنوان مکانیزم انتقال مورد استفاده قرار می گیرد (انتقال داده در بستر شبکه بر اساس آن ها صورت می گیرد). این مقادیر ثوابتی همچون AF_INET، PF_INET، PF_UNIX، PF_X25 و غیره .. هستند.
  • عبارت type :عبارت است از نوع ارتباطاتی که بین دو endpoint برقرار می شود. این عبارت معمولا SOCK_STREAM را برای پروتکل های connection-oriented (امن و تضمین دهنده ی تحویل اطلاعات) و SOCK_DGRAM را ویژه پروتکل های connectionless (غیر امن با سرعت بالا که تحویل داده ها را تضمین نمی کند) شامل می شود.
  • عبارت protocol : به طور پیش فرض بر روی 0 تنظیم می شود، این مفهوم غالبا جهت معرفی نوع دیگر از پروتکل داخل یک domain و type بکار می رود.
  • عبارت hostname : شناسه و اسم اینترفیس شبکه است:
    یک رشته که می تواند اسم سرویس دهنده (hostname)، آدرس IP نسخه ی 4، آدرس IPV6 (آدرس IP ورژن 6) با ساختار نگارشی دو نقطه باشد. یک رشته " " که آدرس INADDR_BROADCAST را تعریف می کند. یک رشته با طول صفر که INADDR_ANY را تعریف می کند یا یک عدد صحیح اختصاص داده شده به hostname که معرف یک سیستم در آن شبکه است.
  • عبارت port : هر سرویس دهنده به کلاینت هایی که یک یا چند پورت را صدا می زنند، گوش می دهد. پورت می تواند شماره ی پورت Fixnum باشد، یک رشته دربردارنده ی شماره ی پورت یا اسم سرویس باشد.

 

آموزش برنامه نویسی شبکه در پایتون : ماژول Socket

به منظور ایجاد یک Socket، لازم است تابع socket.socket() در ماژول socket را فراخوانی نمایید که سینتکس و دستور کلی آن به صورت زیر می باشد :

s = socket.socket (socket_family, socket_type, protocol=0)

 

در زیر شرح هر یک از این پارامترها را مشاهده می کنید :

  • پارامتر socket_family : این پارامتر، همان طور که در بالا توضیح داده شد، می تواند AF_UNIX یا AF_INET باشد.
  • پارامتر socket_type : این پارامتر می تواند یا SOCK_STREAM و یا SOCK_DGRAM باشد.
  • پارامتر protocol : این پارامتر اختیاری بوده و به صورت پیش فرض بر روی 0 تنظیم می شود.

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

 

متدهای Server Socket

  • متد s.bind() : این متد آدرس (hostname یا اسم سرویس دهنده، جفت آدرس پورت یاport number pair) را به socket به صورت دو طرفه وصل می کند.
  • متد s.listen() : این متد یک گوش فرادهنده (Listener) به TCP تنظیم و راه اندازی می کند.
  • متد s.accept() : این متد درخواست اتصال به سرویس دهنده را می پذیرد و به عبارتی ارتباط معلق را به سرور معرفی می کند.

 

متدهای Receiver Socket

  • متد s.connect() : این متد اتصال به سرویس دهنده ی را بر اساس TCP راه اندازی می کند.

 

متدهای کلی ماژول socket

  • متد s.recv() : این متد پیغام TCP را دریافت می کند.
  • متد s.send() : متد حاضر پیغام TCP را ارسال می کند.
  • متد s.recvfrom() : متد جاری پیغام UDP را دریافت می کند.
  • متد s.sendto() : این متد پیغام UDP را ارسال می کند.
  • متد s.close() : این متد socket را می بندد.
  • متد socket.gethostname() : اسم سرویس دهنده (hostname) را در خروجی برمی گرداند.

 

پیاده سازی بخش مربوط به سرویس دهنده

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

حال متد bind(hostname, port) را جهت مشخص کردن یک port برای سرویس خود در دستگاه میزبان یا سرویس دهنده فراخوانی نمایید.

سپس، متد accept() را بر روی آبجکت s (آبجکت ساخته شده ی socket) جهت معرفی ارتباط معلق به ماشین سرور فراخوانی می کنید. این متد صبر می کند که سرویس گیرنده به port یا آدرس درگاه تعیین شده، متصل شود و متعاقبا آبجکت connection را که نشانگر اتصال آن سرویس گیرنده (کلاینت) است در خروجی برمی گرداند.

#!/usr/bin/python           # This is server.py file
import socket               # Import socket module
s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port
s.listen(5)                 # Now wait for client connection.
while True:
c, addr = s.accept()     # Establish connection with client.
print 'Got connection from', addr
 c.send('Thank you for connecting')
c.close()                # Close the connection

 

پیاده سازی بخش مربوط به سرویس گیرنده

در این بخش از آموزش، یک اپلیکیشن ساده سمت سرویس گیرنده می نویسیم که اتصال به پورت معین 12345و دستگاه سرویس (سرویس دهنده) را فراهم می آورد. به راحتی می توانید یک کلاینت یا سرویس گیرنده ی socket به واسطه ی تابع مربوطه از ماژول socket ایجاد کرد.

متد socket.connect(hosname, port ) یک اتصال بر اساس پروتکل TCP به hostname (دستگاه سرویس دهنده ی مربوطه بر اساس شماره ی port) باز می کند. این متد بر اساس اسن ماشین سرور و آدرس پورت اتصال را جهت تبادل داده برقرار می نماید.

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

#!/usr/bin/python           # This is client.py file
import socket               # Import socket module
s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close                     # Close the socket when done

 

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

# Following would start a server in background.
$ python server.py & 
# Once server is started run client as follows:
$ python client.py

 

خروجی زیر را برمی گرداند :

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

 

ماژول های برنامه نویسی تحت شبکه برای Python / Python Internet modules

در زیر لیستی از ماژول های مهم و پرکاربرد پایتون در زمینه ی برنامه نویسی تحت شبکه را مشاهده می کنید.

 

با آموزش های دیگر در زمینه آموزش پایتون همراه ما باشید...



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 36


در این مقاله از آموزش طراحی سایت به بررسی تبدیل سه بعدی در CSS3 می پردازیم و متدهای مورد نیاز برای این تبدیل را همراه با هم تمرین می کنیم..

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

 

 

توابع تبدیل سه بعدی در CSS3

مبحث پیش رو متدهای تبدیل سه بعدی را در CSS3 برای شما تشریح می کند :

  • rotateX()
  • rotateY()
  • rotateZ()

متد rotateX()

به کمک متد ()rotateX می توان عنصر مورد نظر را بر حول محور X آن، به میزان درجه تعریف شده، چرخاند.

1234div { -webkit-transform: rotateX(150deg); /* Safari */ transform: rotateX(150deg); }

 

متد rotateY()

متد مزبور یک المان را حول محور Y بر اساس درجه ی تعیین شده می چرخاند.

1234div { -webkit-transform: rotateY(130deg); /* Safari */ transform: rotateY(130deg); }

 

متد rotateZ()

تابع مذکور یک المان را حول محور Z آن بر اساس درجه ی معین می چرخاند :

1234div { -webkit-transform: rotateZ(90deg); /* Safari */ transform: rotateZ(90deg); }

 

خاصیت های transform در CSS3

جدول زیر کلیه ی خاصیت های مربوط به transform در CSS3 را فهرست می کند :

  • خاصیت transform : جلوه دو بعدی و سه بعدی به عنصر مربوطه اعمال می کند.
  • خاصیت transform-origin : به شما اجازه می دهد تا موقعیت عنصر تبدیل شده را تغییر دهید.
  • خاصیت transform-style : تعیین می کند چگونه المان های تودرتو (nested) در فضای سه بعدی پردازش و نمایش داده شود.
  • خاصیت perspective : نحوه نمایش عناصر سه بعدی را مشخص می کند (دور نما).
  • خاصیت perspective-origin : تعریف کننده ی محل قرار گیری المان سه بعدی از پایین.
  • خاصیت backface-visibility : هنگامی را در اثر چرخش، پشت عنصر نمایان می شود (جلوی آن نمایان نیست)، تعیین می کند که المان نمایش داده شود یا خیر.

 

توابع تبدیل سه بعدی در CSS3

  • تابع (matrix3d (n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n : کلیه تبدیل های سه بعدی را دربر می گیرد.
  • تابع (translate3d(x,y,z : انتقال (حرکت) سه بعدی عنصر را مقدار دهی می کند.
  • تابع (translate X(x : یک انتقال سه بعدی را تعریف کرده و فقط مقدار محور X را بکار می برد (حرکت سه بعدی، در جهت محور X تعریف می کند).
  • تابع (translate Y(y : یک حرکت سه بعدی، در جهت محور Y تعریف می کند.
  • تابع (translate Z(z : یک حرکت سه بعدی، در جهت محور Z تعریف می کند.
  • تابع (scale3d(x,y,z : یک تغییر اندازه سه بعدی (مقیاس بندی سه بعدی)، تعریف می کند.
  • تابع (scale X(x : یک تغییر اندازه سه بعدی، در طول محور X تعریف می کند.
  • تابع (scale Y(y : یک تغییر اندازه سه بعدی، در امتداد محور Y تعریف می کند.
  • تابع (scale Z(z : یک تغییر اندازه سه بعدی، در جهت محور Z تعریف می کند.
  • تابع (rotate3d(x,y,z,angle : چرخش سه بعدی را تعریف می کند.
  • تابع (rotate X(angle : چرخش عنصر را در امتداد محور X تعریف می کند.
  • تابع (rotate Y(angle : چرخش سه بعدی در طول محور Y تعریف می کند.
  • تابع (rotate Z(angle : یک چرخش سه بعدی در امتداد محور Z تعریف می کند.
  • تابع (perspective (n : یک دورنمای سه بعدی (perspective) برای المان تبدیل شده تعریف می کند.

با دیگر مقاله های مرتبط با آموزش طراحی سایت همراه ما باشید..



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 35


امروز با مقاله دیگری از سری مقاله های آموزش طراحی سایت همراه شما هستیم. در این مقاله به آموزش افزونه Flickerplate در JQuery می پردازیم.

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

bower install flickerplate

لینک های زیر را در پروژه قرار دهید :

< head >
< link href="css/flickerplate.css" rel="stylesheet" type="text/css" >
< /head >
< body >
/* Your content goes here */
< script src="js/min/flickerplate.js" >< /script >
< /body >

 

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

< div class="flicker-example" >
< ul >
< li data-background="image-url.jpg" >
< div class="flick-title" >Example Heading< /div >
< div class="flick-sub-text" >Sub Text< /div >
< /li >
< li data-background="image-url.jpg" >
< div class="flick-title" >Example Heading< /div >
< div class="flick-sub-text" >Sub Text< /div >
< /li >
< /ul >
< /div >
< script >
new flickerplate({
selector: '.flicker-example'
});
< /script >

 

آپشن های پلاگین FlickerPlate در JQuery

مثالی از پلاگین FlickerPlate

new flickerplate({
selector: '.flicker-example',
animation: 'transition-fade',
autoFlick: false,
dotAlignment: 'right',
theme: 'dark'
});

اگر قصد دارید پلاگین شما با قابلیت حرکت به صورت لمسی نیز باشد، از کتابخانه Hammer استفاده کنید :

< body >
 /* Your content goes here */
< script src="js/min/hammer-v2.0.3.js" >< /script >
< script src="js/min/flickerplate.js" >< /script >
< /body >

 

با مقاله های دیگر در زمینه آموزش طراحی سایت همراه ما باشید ...



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 37


امروز با مقاله جدیدی از سری مقاله های آموزش طراحی سایت در کنار شما عزیزان هستیم. در این مقاله سعی داریم به آموزش سیستم گرید در بوت استرپ 4 بپردازیم.

آموزش سیستم خانه بندی گرید سیستم Grid System بوت استرپ 4

سیستم گرید بندی (Bootstrap 4 Grid System) بوت استرپ 4 به شما اجازه می دهد تا 12 خانه یا ستون (column) در یک سطر داشته باشید. اگر نمی خواهید از 12 خانه هر سطر به صورت تک تک استفاده کنید، می توانید از ترکیب آنها، خانه یا ستون های بزرگتری ایجاد نمایید. شکل زیر، مفهوم کلی گرید سیستم بوت استرپ 4 را نشان می دهد :

سیستم گرید بندی بوت استرپ 4، کاملا واکنش گرا یا ریسپانسیو (Responsive) است و ستون ها در یک سطر، بر حسب عرض و اندازه صفحه نمایش، خود را مرتب کرده و بهترین حالت نمایش را ارائه می دهند. برای مثال در یک صفحه نمایش بزرگ، می توانید محتویات را در 3 ستون پهن نمایش دهید، در حالی که همان 3 ستون در یک صفحه موبایل، باریکتر شده، هر کدام در یک سطر کامل قرار گرفته و بر روی هم نمایش داده می شوند.

 

کلاسهای سیستم grid در Bootstrap 4

بوت استرپ 4، دارای 5 کلاس مختلف برای گریدبندی خانه در صفحه نمایش های مختلف است :

  • کلاس col- : صفحه نمایش های بسیار کوچک که عرض آن ها کمتر یا مساوی 576 پیکسل است مثل موبایل.
  • کلاس col-sm- : دستگاه ها با صفحه نمایش کوچک که عرض آن ها مساوی یا بزرگتر از 576 پیکسل است.
  • کلاس col-md- : دستگاه ها با صفحه نمایش متوسط که عرض آن ها مساوی یا بزرگتر از 768 پیکسل است مثل تبلت.
  • کلاس col-lg- : دستگاه هایی با صفحه نمایش بزرگ که عرض آن ها مساوی یا بزرگتر از 992 پیکسل است.
  • کلاس col-xl- : دستگاه هایی با صفحه نمایش بسیار بزرگ که عرض آن ها مساوی یا بزرگتر از 1200 پیکسل است مثل مانیتورهای عریض.

کلاس های فوق را می توایند جهت ایجاد قالب و چیدمان های دینامیک و فلکسیبل (flexible layouts)، با هم ترکیب کرده و استفاده نمایید.

 

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

 

آموزش قوانین گرید سیستم در بوت استرپ 4

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

  • سطرها (Rows) بایستی درون یک عنصر دربرگیرنده یا Container با کلاس .container (عرض ثابت) یا کلاس .container-fluid (تمام عرض صفحه یا عنصر مادر آن)، قرار گرفته تا ترازبندی صحیح داشته و مارجین و padding آن ها درست تنظیم شود.
  • از سطرها (Rows) برای ایجاد گروه های افقی از ستون ها (Columns)، استفاده می شود.
  • محتویات بایستی درون ستون ها (Columns) قرار گرفته و فقط ستون ها می توانند اولین فرزندان یا زیرمجموعه سطرها باشند.
  • کلاس های از قبل تعریف شده ای مثل row یا col-sm-4 برای قالب بندی سریع گریدها (Grid)، تعریف شده اند.
  • ستون ها (Columns) بین محتویات شان فاصله یا گاتر (Gutter) ایجاد می کنند به وسیله Padding. این فاصله یا Padding در سطر اول و آخر عنصر مادر، به صورت offset تعیین می شود به وسیله مارجین منفی که در کلاس row وجود دارد.
  • ستون های گرید (Grid Columns) با تعیین عددی بین 1 تا 12 از 12 ستون ممکن، ایجاد می شوند. برای مثال، اگر می خواهید 3 ستون هم عرض داشته باشید، بایستی 4 خانه گرید به هر کدام اختصاص داده و از کلاس ی مثل col-sm-4 استفاده نمایید.
  • میزان عرض ستون ها در Bootstrap 4، برحسب درصد تنظیم می شود، لذا همواره در عنصر مادر (row)، شناور بوده و سایز آن ها بستگی مستقیم به عرض عنصر دربرگیرنده آن ها دارد.
  • بزرگترین فرق بین Bootstrap4 و Bootstrap 3 این است که بوت استرپ 4، به جای خاصیت شناورسازی (floats) از فلکس باکس (Flex) استفاده می کند. یک مزیت بزرگ flexbox این که ستون های گرید بدون عرض مشخص، به صورت خودکار با عرض هایی یکسان (و حتی ارتفاع یکسان) ترازبندی و قالب دهی می شوند که در سیستم floats به این صورت نیست. 3 المنت که کلاس col-sm دارند، در تمامی صفحه نمایش ها (حتی بزرگتر از موبایل تا بالاترین حد)، همواره 33.33 درصد از عرض صفحه یا عنصر Container را اشغال می کنند.

 

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

 

نکته : گزینه FlexBox در مرورگرهای IE9 و قبلتر، پشتیبانی نمی شود. لذا اگر پشتیبانی مرورگرهای IE8 و IE9 ار سایت تان برای شما مهم است، از بوت استرپ 3 استفاده نمایید. بوت استرپ 3، پایدارترین نسخه بوت استرپ بوده و هنوز توسط تیم توسعه دهنده جهت رفع باگ ها احتمالی، ارائه مستندات آموزشی و ... پشتیبانی می شود. ولی قابلیت های جدید از جمله FlexBox به آن اضافه نشده است.

 

بررسی ساختار پایه یک گرید بوت استرپ 4

در کد مثال عملی زیر، یک مثال ساده و پایه از نحوه گریدبندی خانه ها در بوت سترپ 4 را نشان داده ایم. کد مثال را مطالعه کرده، در ادامه به تشریح نکات مهم آن پرداخته ایم :

مثال گرید سیستم

< !-- Control the column width, and how they should appear on different devices -->
< div class="row">
< div class="col-*-*">< /div>
< div class="col-*-*">< /div>
< div class="col-*-*">< /div>
< /div>
< !-- Or let Bootstrap automatically handle the layout -->
< div class="row">
< div class="col">< /div>
< div class="col">< /div>
 < div class="col">< /div>
< div class="col">< /div>
< /div>

در مثال اول، به وسیله تگ div با کلاس row، یک سطر افقی ایجاد کرده ایم. سپس به تعداد مورد نظر، ستون های دلخواه را با تگ هایی با کلاس col-*-*، درون آن قرار داده ایم. * اول در کلاس فوق، تعیین کننده عرض صفحه نمایش هدف است که می تواند یکی از مقادیر sm، md، lg و یا xl را داشته باشد. * دوم هم تعیین کننده عرض ستون بر حسب عددی از 1 تا 12 است که مثلا 6، یعنی 6 واحد از 12 خانه را اشغال کند.

در مثال دوم، به جای تعیین عدد برای هر ستون در کلاس col، اجازه داده ایم تا خود بوت استرپ قالب (layout) آن را با ایجاد ستون های هم عرض مدیریت کند. مثلا کاربرد در عنصر با کلاس col، یعنی اینکه از 100 درصد عرض، به هر ستون 50 درصد اختصاص بده. به همین ترتیب با 3 عنصر کلاس Col، یعنی عرض هر کدام 33 درصد و با چهار ستون عرض هرکدام 25 درصد، عرض کل سطر باشد.

همچنین در کلاس فوق می توانید از حالت col-sm|md|lg|xl نیز استفاده نمایید تا در هر اندازه صفحه نمایش، نحوه قرارگیری ستون ها را به دقت تعیین نمایید.

 

جزئیات کامل گرید سیستم Grid System در بوت استرپ 4

  • عرض کمتر از 576 پیکسل = بسیار کوچک
  • عرض بزرگتر یا مساوی 576 پیکسل = کوچک
  • عرض بزرگتر یا مساوی 768 پیکسل = متوسط
  • عرض بزرگتر یا مساوی 992 پیکسل = بزرگ
  • عرض بزرگتر یا مساوی 1200 پیکسل = بسیار بزرگ

 

پیشوند کلاسهای سیستم grid در Bootstrap 4 

  • col-
  • .col-sm
  • .col-md
  • .col-lg
  • .col-xl.

رفتار گرید سیستم در Bootsratp 4

  • تمامی ستون ها به صورت افقی همواره نمایش داده می شوند.
  • از سمت چپ تراز شده و در عرض مناسب ستون ها همگی افقی هستند.
  • از سمت چپ تراز شده و در عرض مناسب ستون ها همگی افقی هستند.
  • از سمت چپ تراز شده و در عرض مناسب ستون ها همگی افقی هستند.
  • از سمت چپ تراز شده و در عرض مناسب ستون ها همگی افقی هستند.

 

عرض عنصر دربرگیرنده Container در گرید سیستم در Bootsratp 4

  • بدون عرض (auto اتوماتیک)
  • 540 پیکسل.
  • 720 پیکسل.
  • 960 پیکسل.
  • 1140 پیکسل.

مناسب برای :

  • موبایل هایی با صفحات بسیار کوچک.
  • موبایل های معمولی.
  • تبلت ها.
  • لپ تاپ ها.
  • مانیتورهای بزرگ و کامپیوترهای رومیزی.

 

تعداد ستون در هر سطر

  • 12.
  • 12.
  • 12.
  • 12.
  • 12.

 

عرض گاتر (Gutter)

  • 30 پیکسل (15 پیکسل از هر دو طرف ستون).
  • 30پیکسل (15 پیکسل از هر طرف ستون).
  • 30پیکسل (15 پیکسل از هر طرف ستون).
  • 30پیکسل (15 پیکسل از هر طرف ستون).
  • 30پیکسل (15 پیکسل از هر طرف ستون).

 

قابل توجه تو در تو شدن Nested

  • yes.
  • yes.
  • yes.
  • yes.
  • yes.

داشتن offset

  • بله.
  • بله.
  • بله.
  • بله.
  • بله.

 

ترتیب قرار گرفتن ستون ها

  • بله.
  • بله.
  • بله.
  • بله.
  • بله.

 

با دیگر مقاله های آموزشی در زمینه آموزش طراحی سایت همراه ما باشید.



امتياز : نتيجه : 0 امتياز توسط 0 نفر مجموع امتياز : 0

بازديد : 29

موضوعات
? آموزش طراحی سایت آموزش React Native آموزش سی شارپ آموزش جاوا آموزش پایتون آموزش sql آموزش ASP.NET Core آموزش داده کاوی و یادگیری ماشین

1400
1399
1398
1391
آمار سايت
افراد آنلاين : 1
بازديد امروز : 31
بازديد ديروز : 69
هفته گذشته : 215
ماه گذشته : 517
سال گذشته : 5,190
کل بازديد : 19,453
کل مطالب : 171
نظرات : 0
تعداد اعضا : 1

امروز : شنبه 29 اردیبهشت 1403

طراح قالب

مترجم قالب

جديدترين مطالب روز

فيلم روز

آموزش برنامه نویسی