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

به روز ترین مطالب آموزشی و متدلوژی های برنامه نویسی

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

به روز ترین مطالب آموزشی و متدلوژی های برنامه نویسی

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


آدرس : خیابان شریعتی بالاتر از ملک جنب بانک صادرات طبقه دوم واحد 7
همراه: 09123840871 تلفن: 88146323 - 88146330

  • ۰
  • ۰

سلام دوستان...

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

قسمت اول آموزش Python

 

آموزش توابع در پایتون

تابع یک قطعه کد سازمان دهی شده است که می توان آن را بارها فراخوانی کرده و مورد استفاده قرار داد. تابع به منظور اجرای یک عملیات خاص بکار می رود. توابع modularity (قابلیت تفکیک مولفه های سیستم و ادغام مجدد آن ها؛ در واقع modularity معماری نرم افزار را به کامپوننت هایی تقسیم می کند که پیاده سازی و نگهداشت آن را آسان می سازد) برنامه و قابلیت استفاده ی مجدد آن را بالا می برد. همان طور که می دانید، پایتون توابع درون ساخته ی متعددی همچون print() ارائه می دهد، با این حال کاربر می تواند توابع خود را تعریف کند که به آن توابع user-defined یا توابع کاربر می گویند.

 

تعریف تابع

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

  1. قطعه کد تابع باید با کلیدواژه ی def آغاز شود. به دنبال آن اسم تابع و پرانتز درج می شود ( () ).

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

  3. اولین دستور تابع می تواند یک دستور اختیاری باشد - function_docstring.

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

  5. دستور return اجرای تابع را متوقف کرده نتیجه را برمی گرداند (جمع بندی یک سری عملیات و یا کارهایی رو نمایش می دهد) و در صورت نیاز یک عبارت را به فراخواننده پاس می دهد. دستور return None نیز یعنی هیچ مقداری را به عنوان خروجی برنگرداند.

نحوه ی نگارش (syntax):

def functionname( parameters ):

"function_docstring"

function_suite

return [expression]

پارامترها به ترتیبی که تعریف شده اند، عمل می کنند و بایستی آن ها را به همان ترتیبی که تعریف شده اند، مقداردهی کرد.

 

مثال

تابع زیر یک رشته به عنوان ورودی پذیرفته و آن را چاپ می کند.

def printme( str ):

"This prints a passed string into this function"

print str

return

 

آموزش پایتون : فراخوانی تابع

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

#!/usr/bin/python

# Function definition is here

def printme( str ):

"This prints a passed string into this function"

print str

return;

# Now you can call printme function

printme("I'm first call to user defined function!")

printme("Again second call to the same function")

نتیجه ی زیر حاصل می گردد:

I'm first call to user defined function!

Again second call to the same function

 

ارسال پارامتر با reference در برابر ارسال با مقدار

تمامی پارامترها (آرگومان ها) در زبان پایتون با reference پاس داده می شوند، بدین معنی که اگر آنچه یک پارامتر به آن اشاره دارد را در تابع تغییر دهید، تغییر در تابع فراخواننده نیز منعکس می شود.

#!/usr/bin/python

# Function definition is here

def changeme( mylist ):

"This changes a passed list into this function"

mylist.append([1,2,3,4]);

print "Values inside the function: ", mylist

return

# Now you can call changeme function

mylist = [10,20,30];

changeme( mylist );

print "Values outside the function: ", mylist

در اینجا reference به شی ارسالی حفظ شده و مقادیر جدید را به همان شی الصاق می کنیم. نتیجه:

Values inside the function: [10, 20, 30, [1, 2, 3, 4]]

Values outside the function: [10, 20, 30, [1, 2, 3, 4]]

یک مثال دیگر را در زیر مشاهده می کنید که آرگومان با reference ارسال شده و reference مورد نظر در تابع فراخوانده شده، بازنویسی (overwrite) شده است.

#!/usr/bin/python

# Function definition is here

def changeme( mylist ):

"This changes a passed list into this function"

mylist = [1,2,3,4]; # This would assig new reference in mylist

print "Values inside the function: ", mylist

return

# Now you can call changeme function

mylist = [10,20,30];

changeme( mylist );

print "Values outside the function: ", mylist

پارامتر mylist، نسبت به تابع changeme محلی (local) می باشد. ویرایش پارامتر مزبور در تابع موردنظر هیچ تاثیری بر روی mylist نمی گذارد. درواقع تابع هیچ کار خاصی انجام نمی دهد، نتیجه ای که از آن حاصل می گردد به شرح زیر می باشد:

Values inside the function: [1, 2, 3, 4]

Values outside the function: [10, 20, 30]

 

آرگومان های تابع

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

  1. آرگومان های الزامی

  2. آرگومان های Keyword

  3. آرگومان های پیش فرض

  4. آرگومان های با طول متغیر (Variable-length)

 

آرگومان های الزامی

آرگومان های الزامی، آرگومان هایی هستند که به ترتیب (تعریف شده) به تابع مورد نظر پاس داده می شوند. در اینجا، تعداد آرگومان هایی که در فراخوانی تابع مشخص می شود باید با تعریف تابع منطبق باشد. برای فراخوانی تابع printme()، می بایست یک آرگومان به آن ارسال کنید، در غیر این صورت خطای نحوی (syntax error) می دهد:

#!/usr/bin/python

# Function definition is here

def printme( str ):

"This prints a passed string into this function"

print str

return;

# Now you can call printme function

printme()

 

آرگومان های keyword

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

#!/usr/bin/python

# Function definition is here

def printme( str ):

"This prints a passed string into this function"

print str

return;

# Now you can call printme function

printme( str = "My string")

کد بالا پس از اجرا، نتیجه ی زیر را بدست می دهد:

My string

مثال زیر تصویر روشن تری از آن ارائه می دهد. توجه داشته باشید که ترتیب پارامترها اهمیتی ندارد.

#!/usr/bin/python

# Function definition is here

def printinfo( name, age ):

"This prints a passed info into this function"

print "Name: ", name

print "Age ", age

return;

# Now you can call printinfo function

printinfo( age=50, name="miki" )

خروجی:

Name: miki

Age 50

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

#!/usr/bin/python

# Function definition is here

def printinfo( name, age = 35 ):

"This prints a passed info into this function"

print "Name: ", name

print "Age ", age

return;

# Now you can call printinfo function

printinfo( age=50, name="miki" )

printinfo( name="miki" )

نتیجه:

Name: miki

Age 50

Name: miki

Age 35

 

دوره آموزش پایتون: آرگومان های با طول متغیر (Variable-length arguments)

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

def functionname([formal_args,] *var_args_tuple ):

"function_docstring"

function_suite

return [expression]

علامت (*) پیش از اسم متغیر (vartuple) که دارنده ی آرگومان های متغیر nonkeyword است، درج می شود. لازم به ذکر است که این tuple، چنانچه به هنگام فراخوانی تابع (function call) هیچ آرگومان اضافی مشخص نشود، تهی باقی می ماند. مثال:

#!/usr/bin/python

# Function definition is here

def printinfo( arg1, *vartuple ):

"This prints a variable passed arguments"

print "Output is: "

print arg1

for var in vartuple:

print var

return;

# Now you can call printinfo function

printinfo( 10 )

printinfo( 70, 60, 50 )

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

Output is:

10

Output is:

70

60

50

 

توابع بی نام (Anonymous functions)

توابعی که به شیوه ی معمول و با درج کلیدواژه ی def تعریف نشده اند، توابع anonymous نام دارند. برای ایجاد توابع anonymous، بایستی از کلیدواژه ی lambda استفاده نمود.

  1. توابعی که به شکل lambda تعریف شده اند، قادراند چندین آرگومان به عنوان ورودی بپذیرند، اما فقط یک مقدار را در قالب عبارت به عنوان خروجی برمی گرداند. همچنین نمی توانند چندین دستور یا عبارت درخود داشته باشند.

  2. یک تابع anonymous نمی تواند به صورت مستقیم برای چاپ (print) فراخوانی شود، زیرا lambda به یک عبارت نیاز دارد.

  3. توابع lambda دارای فضای نامی محلی (local namespace) خود هستند و نمی توانند به متغیرهایی که در لیست پارامتر خود آورده نشده و نیز متغیرهایی که در فضای نامی سراسری هستند، دسترسی داشته باشند.

  4. اگرچه بنظر می رسد که lambda ها، نسخه ی تک خطی از یک تابع هستند، با این وجود معادل دستورات درون برنامه ای (in-line statement) در زبان های C و C++ محسوب نمی شوند که هدف از آن افزایش کارایی تابع به وسیله ی ارسال پشته ی تخصیص تابع هنگام فراخوانی است.

 

ساختار نگارشی

سینتکس توابع lambda همان طور که در نمونه ی زیر مشاهده می کنید، شامل تنها یک خط می باشد:

lambda [arg1 [,arg2,.....argn]]:expression

در زیر نحوه ی عملکرد تابعی که به صورت lambda تعریف شده باشد، را مشاهده می کنید:

#!/usr/bin/python

# Function definition is here

sum = lambda arg1, arg2: arg1 + arg2;

# Now you can call sum as a function

print "Value of total : ", sum( 10, 20 )

print "Value of total : ", sum( 20, 20 )

نتیجه:

Value of total : 30

Value of total : 40

 

دستور return

دستور [expression] return عملیات تابع را به پایان می رساند و خروجی آن را برمی گرداند و در صورت لزوم یک عبارت را به فراخواننده ارسال می نماید. دستور return ای که جلوی آن هیچ آرگومانی درج نشده باشد برابر با return none می باشد. مثال های بالا هیچ مقداری را برنمی گردانند. مثال زیر یک مقدار را از تابع به صورت زیر برمی گرداند:

#!/usr/bin/python

# Function definition is here

def sum( arg1, arg2 ):

# Add both the parameters and return them."

total = arg1 + arg2

print "Inside the function : ", total

return total;

# Now you can call sum function

total = sum( 10, 20 );

print "Outside the function : ", total

نتیجه ی آن را در زیر مشاهده می کنید:

Inside the function : 30

Outside the function : 30

 

حوزه ی دسترسی متغیر (variable scope)

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

  1. متغیرهای سراسری (global)

  2. متغیرهای محلی (local)

 

مقایسه ی متغیر سراسری با محلی

متغیرهایی که داخل بدنه ی تابع تعریف می شوند، حوزه ی دسترسی آن ها محلی محسوب می شود. متغیرهایی که بیرون بدنه یا ساختمان تابع تعریف می شوند، متغیرهای سراسری نامیده می شوند. متغیرهای محلی را فقط می توان درون تابعی که در آن (متغیر) تعریف شده، مورد دسترسی قرار داد، در حالی که متغیرهای سراسری از تمام بخش های برنامه (توسط تابع) قابل دستیابی می باشد. به هنگام فراخوانی تابع، متغیرهای تعریف شده داخل آن همگی قابل دسترسی می باشند (در حوزه ی دسترسی قرار می گیرند). مثال:

#!/usr/bin/python

total = 0; # This is global variable.

# Function definition is here

def sum( arg1, arg2 ):

# Add both the parameters and return them."

total = arg1 + arg2; # Here total is local variable.

print "Inside the function local total : ", total

return total;

# Now you can call sum function

sum( 10, 20 );

print "Outside the function global total : ", total

نتیجه:

Inside the function local total : 30

Outside the function global total : 0

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

  • افشین رفوآ
  • ۰
  • ۰
به بخش جدید آموزش سی شارپ خوش آمدید.

 

آموزش ساختار دستوری if در C# :
یکی از مهم ترین ساختارهای دستوری در هر زبان برنامه نویسی از جمله C#، دستور if است. توانایی ساخت دستورات شرطی کلی از مهم ترین کارهایی است که بایستی بتوان با زبان ها ی برنامه نویسی انجام داد. در C#، ساختار شرطی if بسیار ساده و کاربردی است. اگر از ساختار دستوری شرطی if در هر زبان برنامه نویسی دیگری استفاده کرده باشید، به راحتی می توانید در C# نیز از آن بهره بگیرید. ساختار دستور شرطی if نیاز مند یک مقدار boolean است که یا true است یا false. در برخی از زبان های برنامه نویسی، چندین نوع داده ای را می توان به صورت اتوماتیک به Boolean تبدیل کرد، اما در C# باید مستقیما از نوع داده ای Boolean استفاده کنید. برای مثال نمی توانید از نوع داده ای عددی int به صورت مستقیم استفاده کنید، اما می توانید آن را با یک مقدار دیگر قیاس کرده و مقدار true یا false نتیجه را مورد استفاده قرار دهید. در درس قبلی، به آموزش نحوه تعریف و استفاده از متغیرها (Variables) در زبان C# پرداختیم. در این درس هم به آموزش نحوه کار با دستورات شرطی در C# می پردازیم. برای این منظور کد مثال زیر را با دقت مطالعه کنید :
using System;
 
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int number;
 
Console.WriteLine("Please enter a number between 0 and 10:");
number = int.Parse(Console.ReadLine());
 
if(number > 10)
Console.WriteLine("Hey! The number should be 10 or less!");
else
if(number < 0)
Console.WriteLine("Hey! The number should be 0 or more!");
else
Console.WriteLine("Good job!");
 
Console.ReadLine();
}
}
}
آموزش سی شارپ : در کد مثال فوق از دو دستور شرطی if استفاده کرده ایم تا چک کنیم آیا عدد ورودی توسط کاربر، بین 0 تا 10 است یا خیر. به همراه دستور if از کلید واژه else نیز استفاده شده است. قسمت کد else زمانی اجرا می شود که شرط بخش if درست نباشد. اگر در کد مثال فوق دقت کرده باشید، ما از کاراکترهای {} برای دسته بندی دستورات if و else ها استفاده نکرده ایم.. این یک قانون در C# است. اگر کد نوشته شده فقط در حد یک متن خطی باشد، نیازی به استفاده از {} برای دسته بندی کدها نیست.
حجم کد نوشته شده برای مقایسه مقدار یک عدد در مثال فوق کمی زیاد به نظر می رسد. همان کد را می توانید به صورت زیر، خلاصه تر بنویسید :
if((number > 10) || (number < 0))
Console.WriteLine("Hey! The number should be 0 or more and 10 or less!");
else
Console.WriteLine("Good job!");
ما هر یک از دستورات شرطی را درون یک پرانتز قرار داده و سپس از عملگر ǁ که به معنلی "یا"، "or" می باشد، استفاده کرده ایم تا چک کنیم عدد واردشده از 10 بزرگتر یا کوچکتر از 0 است. عملگر دیگری که در این گونه موارد نیز می توانید استفاده کنید عملگر AND به معنای "و" است که به صورت && نوشته می شود. آیا می توانیم در کد مثال دوم از عملگر AND به جای or استفاده کنیم؟. بله، فقط کافی است کد را به صورت زیر بازنویسی کنیم :
if((number <= 10) && (number >= 0))
Console.WriteLine("Good job!");
else
Console.WriteLine("Hey! The number should be 0 or more and 10 or less!");
در این درس عملگرهای "کوچکتر از" و "بزرگتر از" را نیز معرفی کردیم.

 

آموزش سی شارپ : آموزش کار با دستور Switch در C#
دستور Switch همانند مجموعه ای از دستورات پشت سر هم if عمل می کند. دستور Switch درواقع لیستی از حالت های ممکن است که برای هر حالت یک دستور یا کدی جهت اجرا پیش بینی شده است. این دستور همچنین یک حالت default یا پیش فرضی دارد که در صورتی که هیچ یک از حالات آن true نباشد، اجرا خواهد شد. یک دستور ساده Switch ساختاری هماند کد مثال زیر دارد :
int number = 1; switch(number) { case 0: Console.WriteLine("The number is zero!"); break; case 1: Console.WriteLine("The number is one!"); break; }
مقدار شناسه یا identifier (مقدار متغیری که می خواهیم دستور Switch بر حسب آن عمل کند) را پس از واژه کلیدی Switch قرار می دهیم. سپس لیستی از انواع حالت های مختلف برای آن مقدار توسط هر دستور case مشخص شده و مقدار شناسه با مقدار هر case مقایسه می شود. اگر مقدار شناسه با مقدار هر کدام برابر نبود، دستورات بخش پیش فرض default اجرا می شود. اگر دقت کرده باشید، در پایان هر case یک دستور break قرار داده شده است. برای چیست؟ اگر مقدار یک case با مقدار شناسه دستور Switch برابر شود، دستورات آن case اجرا شده و اگر در انتهای case دستور break وجود نداشته باشد، دستورات case های بعدی نیز اجرا خواهد شد. به عبارت دیگر، دستور break ، باعث توقف روند اجرای دستورات Switch شده و برنامه به خط کد بعد از Switch می فرستد. در نوشتن break دقت لازم به عمل آورید، ؟؟؟؟؟ نوشتن آن می تواند کلا برنامه را دچار اختلال کنید. هنگامی که هم یک تابع را در دستورات یک case تعیین می کنید، می توانید با استفاده از return خروجی تابع را به عنوان خروجی Switch برگردانید. در کد مثال، ما از یک متغیر عددی integer به عنوان شناسه دستور Switch استفاده کرده ایم، اما این شناسه می تواند از نوع متنی String و یا هر نوع داده ای دیگر زبان C# باشد. در مثال زیر، ابتدا یک مقدار را به عنوان ورودی از کار برگررفته ایم، سپس آن را به عنوان یک متغیر متنی String به دستور Switch ارسال نموده ایم. در کد مثال زیر، برای هر دو مقدار “yes” و “Maybe” یک دستور مشترک را تعیین کرده ایم.
Console.WriteLine("Do you enjoy C# ? (yes/no/maybe)");
string input = Console.ReadLine();
switch(input.ToLower())
{
case "yes":
case "maybe":
Console.WriteLine("Great!");
break;
case "no":
Console.WriteLine("Too bad!");
break;
}
در کد مثال فوق، سوالی از کاربر پرسیده شده و از وی خواسته شد یکی از مقادیر “yes”، “no” و “maybe” را وارد نماید. سپس مقدار وارد شده از ورودی توسط دستور Consale.ReadLine() خوانده شده و یک دستور Switch بر مبنای آن طراحی شده است. برای سهولت کار کاربر، توسط دستور ToLower() ، کاراکترهای ورودی کاربر را به حروف کوچک تبدیل کرده ایم تا در هنگام مقایسه با مقادیر Case ها، فرقی بین مقدار وارد شده برای حروف بزرگ و کوچک وجود نداشته باشد. اما بدون وجود دستور default در Switch، اگر کاربر در مثال فوق مقداری غیر از مقادیر تعیین شده برای case ها وارد نماید، برنامه هیچ خروجی نخواهد داشت. بنابراین کد مثال فوق را به همراه default به صورت زیر بازنویسی می کنیم :
Console.WriteLine("Do you enjoy C# ? (yes/no/maybe)");
string input = Console.ReadLine();
switch(input.ToLower())
{
case "yes":
case "maybe":
Console.WriteLine("Great!");
break;
case "no":
Console.WriteLine("Too bad!");
break;
default:
Console.WriteLine("I'm sorry, I don't understand that!");
break;
}
اگر کاربر مقداری به غیر از مقادیر تعیین شده برای case ها وارد نماید، بخش default به صورت پیش فرض اجرا خواهد شد.
آموزش سی شارپ ادامه دارد
  • افشین رفوآ
  • ۰
  • ۰
سلام با آموزش Bootstrap 4 از دوره آموزش طراحی سایت در خدمت شما هستیم
کامپوننت Popover بسیار شبیه کادر راهنما tooltip است که در درس قبل به آموزش آن پرداختیم. Popover یک کادر ظاهر شونده pop up است که در هنگام کلیک کاربر بر روی یک المنت، ظاهر می شود. با tooltip دو فرق عمده دارد : یکی این که با کلیک بر روی المنت فعال می شود ؟؟؟؟ عبور موس از روی آن و دوم این که می تواند حاوی محتویات بیشتری باشد.
در عکس زیر، دو نمونه کادر محاوره Popover را نشان داده ایم :
 

 

آموزش نحوه ایجاد کادر Popover در بوت استرپ 4:
برای ایجاد یک کادر Popover در بوت استرپ 4، خاصیت data-toggle=” Popover” را به المنت مورد نظر بدهید.
سپس از خاصیت title برای تعیین متن هدر (Header) کادر Popover استفاده کرده و به وسیله خاصیت data-content، متن ی که می خواهید درون بدنه (body) آن نمایش داده شود را تعیین نمایید.
مثال: در کد مثال عملی، توسط یک تگ a یک کادر محاوره ای Popover را ایجاد کرده ایم :
<a href="#" data-toggle="popover" title="Popover Header"
data-content="Some content inside the popover">Toggle popover</a>
نکته :
برای اجرای درست کادر محاوره ای Popover بایستی آن را توسط jQuery در صفحه لود اولیه بکنید. برای این منظور بایستی از متد Popover() استفاده کرده و کد زیر را درون صفحه قرار دهید :

 

مثال 1
<div class="container">
<h3>Popover Example</h3>
<a href="#" data-toggle="popover" title="Popover Header" data-content="Some content inside the popover">Toggle popover</a>
</div>
 
<script>
$(document).ready(function(){
$('[data-toggle="popover"]').popover();
});
</script>

 

تعیین جهت باز شدن منوی محاوره ای Popover در آموزش طراحی سایت:
به صورت پیش فرض، کادر محاوره ای در سمت راست المنت باز می شود.
اما به وسیله خاصیت data-placement می توانید جهت باز شدن آن را به بالا (top)، راست (right)، زیر (buttom) و چپ (left) تغییر دهید، همانند کد مثال عملی زیر :

 

مثال 2
<a href="#" title="Header" data-toggle="popover" data-placement="top" data-content="Content">Click</a>
<a href="#" title="Header" data-toggle="popover" data-placement="bottom" data-content="Content">Click</a>
<a href="#" title="Header" data-toggle="popover" data-placement="left" data-content="Content">Click</a>
<a href="#" title="Header" data-toggle="popover" data-placement="right" data-content="Content">Click</a>
نکته :
اگر فضای کافی برای باز شدن کادر Popover وجود نداشته باشد خاصیت Placement آن به درستی کار نخواهد کرد. برای مثال، اگر المنت Popover در بالاترین نقطه صفحه باشد و خاصیت placement روی مقدار بالا (top) تنظیم شده باشد، برنامه کادر را در پایین المنت و سمت راست آن (هر جایی که فضا برایش فراهم باشد)، باز خواهد کرد.

 

آموزش ایجاد کادر Popover با قابلیت بسته شدن :
به صورت پیش فرض، المنت Popover در هنگام کلیک مجدد بر روی آن، بسته می شود. اما می توانید با تنظیم خاصیت data-trigger آن روی مقدار focus، کاری کنید با کلیک در ناحیه ای خارج از المنت، کادر بسته شود. همانند مثال عملی زیر :

 

مثال 3
<a href="#" title="Dismissible popover" data-toggle="popover" data-trigger="focus" data-content="Click anywhere in the document to close this popover">Click me</a>
نکته :
اگر می خواهید کادر Popover با عبور موس بر روی المنت ظاهر شود، بایستی خاصیت data-trigger آن را بر روی hover قرار دهید، همانند کد مثال عملی زیر :

 

مثال 4
<a href="#" title="Header" data-toggle="popover" data-trigger="hover" data-content="Some content">Hover over me</a>
 

 

آموزش کار با Toast در Bootstrap 4
کامپوننت Toast همانند یک کادر اخطار alert box است با این تفاوت که فقط برای چند ثانیه و در کنار المنت موردنظر نمایش داده می شود. این کامپوننت در هنگام بروز یک رویداد، مثلا کلیک کاربر بر روی یک دکمه، ارسال یک فرم و ... ظاهر و فعال می شود.

 

آموزش ایجاد یک Toast در بوت استرپ 4:
برای ایجاد کادر محاوره ای Toast، از یک المنت با کلاس toast، یک المنت با کلاس toast-header جهت تعیین عنوان یا هدر آن و یک المنت toast-body جهت تعیین محتوا و body آن، استفاده نمایید. همانند کد مثال عملی زیر :
<div class="toast">
<div class="toast-header">
Toast Header
</div>
<div class="toast-body">
Some text inside the toast body
</div>
</div>
نکته :
برای اجرای صحیح، کادر toast بایستی از قبل توسط jQuery در صفحه مقداردهی اولیه شود. برای این منظور از متد toast() به صورت زیر، استفاده می شود. قطعه کد jQuery زیر را بایستی درون صفحه قرار دهید :
کد زیر برای اجرای اولیه tooltip در Bootstrap 4 توسط jQuery بایستی به صفحه اضافه شود :
<script>
$(document).ready(function(){
$('.toast').toast('show');
});
</script>
مثال 1
<button type="button" class="btn btn-primary" id="myBtn">Show Toast</button>
 
<div class="toast">
<div class="toast-header">
Toast Header
</div>
<div class="toast-body">
Some text inside the toast body
</div>
</div>

 

آموزش ظاهر و مخفی کردن کادر Toast در بوت استرپ 4:
المنت های Toasts به صورت پیش فرض، مخفی هستند. اگر مقدار خاصیت data-antohide را بر روی faile تنظیم کنید، به صورت پیش فرض نمایش داده خواهد شد. برای بسته شدن المنت Toast نیز از یک دکمه button با خاصیت data-dismiss برابر با toast استفاده نمایید، همانند کد مثال عملی زیر :

 

مثال 2
<div class="toast" data-autohide="false">
<div class="toast-header">
<strong class="mr-auto text-primary">Toast Header</strong>
<small class="text-muted">5 mins ago</small>
<button type="button" class="ml-2 mb-1 close" data-dismiss="toast">×</button>
</div>
<div class="toast-body">
Some text inside the toast body
</div>
</div>
راهنمایی :
همانطور که در کد مثال عملی فوق مشاهده کردید، از کلاس mr-auto، ml-2 و mb-1 استفاده شده است. این کلاس ها مارجین های متفاوتی را به المنت اعمال می کنند. در بخش آموزش کلاس های کاربردی Bootstrap 4 utilities به تشریح و آموزش کامل آن ها پرداخته شده است.
 
 
 
آموزش طراحی سایت ادامه دارد
  • افشین رفوآ
  • ۰
  • ۰
سلام عزیزان در این سری آموزشها با پایگاه داده Sql Server آشنا میشوید.

 

دستور INSERT INTO در آموزش SQL SERVER
دستور INSERT INTO برای وارد کردن record جدید به جدول استفاده می شود .
فرم دستور INSERT INTO :
می توان دستور INSERT INTO را به دو صورت نوشت:
در فرم اول نام ستونهایی که اطلاعات در آن درج خواهد شد مشخص نمی گردد و تنها مقادیر مشخص می شوند.
INSERT INTO table_name
VALUES (value1,value2,value3,...);
در فرم دوم هم نام ستون و هم مقادیری که در آن درج خواهد شد مشخص می گردد.
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

 

نحوه استفاده از INSERT INTO در پایگاه داده
در این آموزش از نمونه پایگاه داده مشهور Northwind استفاده خواهیم کرد.
جدول زیر از میان جدول "Customers" انتخاب شده است:
نحوه استفاده از INSERT INTO در پایگاه داده

 

مثال استفاده از دستور INSERT INTO
فرض کنید می خواهیم تا سطر جدیدی را به جدول "Customers" اضافه کنیم.
از عبارت SQL زیر استفاده می کنیم:
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');
جدول"Customers" به شکل زیر خواهد شد:
 
آیا متوجه شدید که شماره ای در ستون Customer ID وارد نکردیم؟
هر ستون Customer ID با وارد کردن یک record جدید بصورت خودکار با یک شماره منحصر به فرد و غیر تکراری به روزرسانی خواهد شد.
داده ها را تنها در ستون های مشخص وارد کنید
می توان تنها داده ها را به ستون های مشخصی اضافه کرد.
عبارت SQL زیر سطر جدیدی را اضافه می کند اما تنها داده ها را به ستون های "Customer Name"، "City" و "Country" وارد می کند (ستون Customer ID نیز به صورت خودکار به روز رسانی خواهد شد):
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
جدول "Customers" به شکل زیر در خواهد آمد:
 
 

 

دستور UPDATE در آموزش SQL SERVER
دستور UPDATE برای به روز رسانی record ها در جدول استفاده می شود.
دستور UPDATE برای به روز رسانی record های موجود در یک جدول استفاده می شود.

 

فرم دستور UPDATE
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_val
نکته:
به عبارت WHERE در دستور UPDATE توجه کنید!
عبارت WHERE مشخص می کند کدام record یا record ها باید بروزرسانی شوند. اگر شما عبارت WHERE را حذف کنید، تمام record ها بروزرسانی می شوند.
نحوه استفاده از دستور UPDATE در پایگاه داده در این آموزش از نمونه پایگاه داده مشهور Northwind استفاده خواهیم کرد.
جدول زیر از میان جدول "Customers" انتخاب شده است:
 
مثال استفاده از دستور UPDATE
فرض کنید می خواهیم ستون های "Contact Person" و "City" از مشتری به نام "Alfreds Futterkiste" را با اطلاعات جدیدی بروز رسانی کنیم.
برای اینکار از عبارت SQL زیر استفاده می کنیم:
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg'
WHERE CustomerName='Alfreds Futterkiste';
جدول "Customers" به شکل زیر خواهد شد:
جدول "Customers" به شکل زیر خواهد شد:
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg'
WHERE CustomerName='Alfreds Futterkiste';
هشدار در مورد دستور UPDATE
هنگام UPDATE کردن record ها دقت کنید. اگر عبارت WHERE را در مثال بالا حذف کرده بودیم مانند آنچه در زیر می بینید:
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg';
جدول "Customers" به شکل زیر می شد:
 
 
آموزش SQL SERVER ادامه دارد
  • افشین رفوآ
  • ۰
  • ۰
به بخش جدید آموزش سی شارپ خوش آمدید.

 

آموزش انواع داده ای Data Types در C#
انواع داده ای یا Data Types در تمامی قسمت های یک زبان برنامه نویسی مثل C# استفاده می شود. به دلیل این که زبان C#، یک زبان قدرتمند داده ای است، بایستی هر زمان که یک متغیر را تعریف و استفاده می کنید، به کامپایلر اطلاع دهید آن متغیر از چه نوع داده ای است. به نحوه و تعیین نوع داده ای یک متغیر به طور کامل در بخش متغیرها (Variable) خواهیم پرداخت. در این درس به طور کلی به بررسی انواع داده ای مهم زبان C# و نحوه کارکرد آن ها می پردازیم. نوع داده ای bool ساده ترین Data Type زبان C# است. این نوع داده ای که به نوع درست یا غلط نیز معروف است، فقط دو نوع مقدار می تواند داشته باشد، true یا false. متغیر bool در هنگام استفاده از عملگرهای منطقی و یا دستورات شرطی مثل if بسیار کاربرد دارد. انواع داده ای int نیز که مخفف کلمه integer است، برای نگهداری اعداد بدون بخش اعشاری آن ها به کار می رود. نوع داده ای int پرکاربردترین متغیر در هنگام کار با اعداد در C# است. متغیرهای integer، بر حسب اندازه عددی که می توانند نگهداری کنند، دارای انواع مختلفی در زبان C# می باشند. نوع داده ای String نیز برای نگهداری متن یا text به کار می رود که عبارت است از تعدادی کاراکتر پشت سر هم. در C#، متغیرهای String از نوع immutable یا تغییرناپذیر هستند، به این معنی که متغیرهای String، پس از تعریف و مقداردهی هرگز تغییر نمی کنند. هنگام کار با متدهایی که یک متغیر String را دستکاری و تغییر می دهند، متغیر String اول تغییر نمی کند، بلکه یک متغیر جدید با مقدار جدید ایجاد می شود. متغیر char نیز برای نگهداری یک کاراکتر تنها به کار می رود.
راهنمایی :
متغیر float نیز برای نگهداری اعداد اعشاری استفاده می شود.

 

تعریف و مقداردهی متغیرها Variable در آموزش سی شارپ
یک متغیر یا Variable بخشی از حافظه سیستم است که همانند یک اتاق برای نگهداری اطلاعات خاصی به کار می رود. متغیرها اساس کار برنامه های C# بوده و به صورت زیر، قابل تعریف هستند :
< data type >   < name > ;
به عنوان مثال در کد زیر یک متغیر از نوع String به نام name را تعریف کرده ایم :
String name;
در کد فوق ، نوع داده ای متغیر و نام آن را تعیین می کند. حالت فوق، ساده ترین حالت تعریف یک متغیر است. اما ممکن است شما بخواهید میدان دید یا Visibility خاصی را برای متغیر خود تعیین کرده و در هنگام تعریف، آن را متد دهی نیز کنید. این کار بایستی به صورت زیر انجام شود :
< visibility >   < data type >   < name >   = < value > ;
در نمونه فوق < visibility > میدان دید متغیر را تعیین می کند. یعنی می گویند چه توابع، کلاس ها و یا متغیرهای دیگری در سطح برنامه می توانند این متغیر را ببینند، فراخوانی و دستکاری کنند. نیز که مقدار اولیه متغیر را مشخص می کند. کد زیر یک مثال را برای تعریف کامل متغیر در C# نشان می دهد :
Private String name = “ Tahlil Dadeh ” ;
در کد مثال زیر، نحوه تعریف، مقداردهی و کار با چند متغیر در زبان C# را در عمل نشان داده ایم :
using System;
 
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string firstName = "John";
string lastName = "Doe";
 
Console.WriteLine("Name: " + firstName + " " + lastName);
 
Console.WriteLine("Please enter a new first name:");
firstName = Console.ReadLine();
 
Console.WriteLine("New name: " + firstName + " " + lastName);
 
Console.ReadLine();
}
}
}
بسیار خب، بخش زیادی از کد مثال فوق را قبلا توضیح داده ایم، بنابراین در این مرحله مستقیم به سراغ بخش مورد نظرمان می رویم. اول از همه، ما چندین متغیر از نوع String Type را تعریف کرده ایم. یک String می تواند شامل متن یا Text باشد و همانطور که در کد مثال می بینید، هر متغیر String را بلافاصله مقدار دهی کرده ایم. سپس یک خط متن را به وسیله دو متغیر بر روی خروجی Consale نشان داده ایم. از کاراکتر (+) برای چسباندن متن دو متغیر String و نمایش آن ها به صورت یک جمله استفاده شده است. در مرحله بعدی، از کاربر خواسته ایم تا یک مقدار جدید را برای متغیر firstName وارد کند. برای این منظور از دستور ReadLine() استفاده شده که یک مقدار ورودی را از کاربر دریافت کرده و درون متغیر firstName قرار می دهد. پس از این که کاربر نام مورد نظر خود را وارد کند، مقدار جدید در متغیر firstName وارد شده و سپس مجددا به وسیله دستور Consale.WriteLine()، جمله را با نام جدید به کاربر نشان داده ایم. در کد فوق ما فقط از یک متغیر استفاده کرده ایم و این کد به خوبی مهم ترین قابلیت یک متغیر یعنی تغییر در هنگام اجرای برنامه (Run Time) را نشان می دهد.
مثال بعدی برای نشان دادن کار متغیرها، انجام عملیات ریاضی است. کد زیر نحوه اتجام کار را نشان می دهد :
int number1, number2;
 
Console.WriteLine("Please enter a number:");
number1 = int.Parse(Console.ReadLine());
 
Console.WriteLine("Thank you. One more:");
number2 = int.Parse(Console.ReadLine());
 
Console.WriteLine("Adding the two numbers: " + (number1 + number2));
 
Console.ReadLine();
کد فوق را در تابع Main مثال قبل قرار داده و برنامه را مجددا اجرا کنید. تنها حقه به کار رفته در مثال دوم، استفاده از متد int.Parse() است. این متد یک مقدار متنی String را خوانده و آن را به یک متغیر عددی integer تبدیل می کند. همانطور که مشاهده می کنید، در کد مثال دوم برنامه هیچ تلاشی برای اعتبارسنجی (validate) مقدار ورودی کاربر انجام نداده و اگر کاربر یک مقدار رشته ای (متن) را وارد کرده و دکمه Enter را بزند، برنامه با اشکال رو به رو خواهد شد، زیرا عمل ریاضی را بر روی متن نمی تواند انجام دهد. برای حل این مشکل در درس های بعد بیشتر توضیح می دهیم.
آموزش سی شارپ ادامه دارد
 
  • افشین رفوآ
  • ۰
  • ۰
سلام عزیزان با آموزش جاوا اسکریپت در خدمت شما دوستان هستیم

 

رشته ها (string) در آموزش طراحی سایت
از رشته (string) به منظور ذخیره سازی و دستکاری نوشته یا متن در جاوا اسکریپت استفاده می شود. رشته در جاوا اسکریپت اصولا جهت ذخیره ی یک سری کاراکتر بکار می رود، مانند این مثال : "John Doe". رشته می تواند هر نوشته ی داخل علامت نقل و قول باشد. امکان استفاده از هر دو نوع " " یا ' ' وجود دارد.
مثال:

 

نمونه یک
<script>
    var carName1 = "Volvo XC60";
    var carName2 = 'Volvo XC60';
    document.getElementById("demo").innerHTML =
    carName1 + "<br>" + carName2;
</script>
حتی می توان از علامت بیان شده داخل خود رشته استفاده کرد، مادام اینکه با علامت های نقل و قول اطراف رشته تداخل پیدا نکنند.
مثال:

 

نمونه دو
var answer1 = "It's alright";
var answer2 = "He is called 'Johnny'";
var answer3 = 'He is called "Johnny"';
document.getElementById("demo").innerHTML =
answer1 + "<br>" + answer2 + "<br>" + answer3;

 

طول رشته (string length)
جهت بدست آوردن طول یک رشته، کافی است از خاصیت (property) length بهره ببرید.
مثال:

 

نمونه سه
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
document.getElementById("demo").innerHTML = txt.length;

 

کارکترهای ویژه ی (Special Characters) در آموزش طراحی سایت
به این خاطر که رشته باید حتما داخل علامت نقل و قول قرار داده شود، جاوا اسکریپت قادر به درک رشته های مشابه نمونه ی زیر نخواهد بود.
مثال:
var y = "We are the so-called "Vikings" from the north."‎
بدین معنا که رشته به صورت زیر کوتاه شده و بقیه ی آن درنظر گرفته نمی شود.
‎"We are the so-called ".‎
جهت اجتناب از بروز مشکلاتی از این دست، باید از کاراکتر"\ " استفاده کنید. علامت (\) برای وارد کردن کاراکترهای ویژه مانند: (")، (') و یا رفتن به خط جدید در یک رشته، استفاده می شود.
مثال:

 

نمونه چهار
var x = 'It\'s alright';
var y = "We are the so-called \"Vikings\" from the north.";
 
document.getElementById("demo").innerHTML = x + "<br>" + y;
جدول زیر تمامی کاراکترهایی که امکان درج آن ها در رشته با استفاده از (\) فراهم می آید را فهرست کرده.
 

 

شکستن خطِ کدهای طولانی (قرار دادن کد در خط بعدی)
به منظور بهبود خوانایی کد، برنامه نویسان تا حد ممکن از قرار دادن بیش از 80 کاراکتر داخل یک خط اجتناب می کنند. در صورتی که دستور جاوا اسکریپت داخل یک خط جا نمی گیرد، بهترین مکان برای شکستن آن خط پس از عملگر خواهد بود.
مثال:

 

نمونه پنج
<h1>My Web Page</h1>
 
<p>
The best place to break a code line is after an operator or a comma.
</p>
 
<p id="demo">false</p>
 
<script>
document.getElementById("demo").innerHTML =
"Hello Dolly.";
</script>
همچنین می توان یک خط کد را از وسط یک رشته ی متنی (text string) قطع کرد و بقیه ی آن را در خط بعدی قرار داد، این امر با استفاده از کاراکتر" \ " امکان پذیر می شود.
مثال:

 

نمونه شش
<script>
document.getElementById("demo").innerHTML = "Hello\
Dolly.";
</script>
توجه:
استفاده از کاراکتر مذکور به گونه ی که تشریح شد یک استاندارد ECMAScript (JavaScript) نیست. برخی از مرورگرها فاصله ی قبل از کاراکتر \ را نمی پذیرند.
روش امن تر و پرکاربرد تر، به هم وصل کردن رشته های شکسته شده توسط " + " می باشد.
مثال:

 

نمونه هفت
<script>
document.getElementById("demo").innerHTML = "Hello" +
"Dolly.";
</script>
اجازه ی نصف کردن (شکستن) خط کد با استفاده از کاراکتر \ به شما داده نمی شود.
مثال:

 

نمونه هشت
<script>
document.getElementById("demo").innerHTML = \
"Hello Dolly.";
</script>
به طور معمول رشته های جاوا اسکریپت مقادیر اولیه ی هستند که از literal ها ساخته می شوند.
var firstName = "John"‎
اما می توان رشته ها را با استفاده از کلید واژه ی new به عنوان شی تعریف کرد.
var firstName = new String("John")‎
مثال:

 

نمونه نه
<script>
var x = "John"; // x is a string
var y = new String("John"); // y is an object
 
document.getElementById("demo").innerHTML =
typeof x + "<br>" + typeof y;
</script>
توجه:
سعی کنید تا حد ممکن از ایجاد رشته به عنوان اشیا خودداری کنید، زیرا که سرعت اجرا را کاهش داده و باعث بوجود آمدن اثار جانبی ملال آوری زیادی می شود.
اگر از عملگر == استفاده کنید، رشته های (که مقادیر یکسان دارند) یکسان تلقی می گردند.
مثال:

 

نمونه ده
<script>
var x = "John"; // x is a string
var y = new String("John"); // y is an object
document.getElementById("demo").innerHTML = (x == y);
</script>
اما چنانچه از عملگر === استفاده کنید، رشته هایی که فقط مقادیر یکسان دارند دیگر کاملا یکسان محسوب نمی شوند زیرا که عملگر ذکر شده انتظار دارد رشته ها از نظر مقدار و نوع با هم یکی باشند.
مثال:

 

نمونه یازده
<script>
var x = "John"; // x is a string
var y = new String("John"); // y is an object
document.getElementById("demo").innerHTML = (x === y);
</script>
حتی بدتر اشیا هستند که نمی توان آن ها را با هم مقایسه کرد.
مثال:

 

نمونه دوازده
<script>
var x = new String("John"); // x is an object
var y = new String("John"); // y is an object
document.getElementById("demo").innerHTML = (x == y);
</script>
مهم : اشیا را نمی توان با هم مقایسه کرد.

 

خصوصیت ها و متدهای رشته
مقادیر اولیه مانند "John Doe" قادر به گرفتن خصوصیت و متد نیستند (زیرا که این مقادیر اولیه شی محسوب نمی شوند). اما در جاوا اسکریپت این امکان برای مقادیر اولیه وجود دارد که متد و خصوصیت دریافت کنند، زیرا که جاوا اسکریپت هنگام اجرای متدها و خاصیت ها (property) با مقادیر اولیه مانند شی برخورد می کند.

 

خاصیت های شی string
خاصیت های شی string
آموزش طراحی سایت ادامه دارد
  • افشین رفوآ
  • ۰
  • ۰
سلام دوستان...
در این قسمت از آموزش پایتون به مفهوم وراثت می پردازیم :
البته که یک ویژگی زبان به نام کلاس، بدون پشتیبانی از وراثت ارزش نخواهد داشت. نحوه نگارش برای تعریف یک کلاس مشتق شده به صورت زیر است:
class DerivedClassName(BaseClassName):
<statement-1>
.
.
.
<statement-n>
</statement-n></statement-1>
نام BaseClassName باید در حوزه‌ی در بر دارنده تعریف کلاس مشتق شده، تعریف شود. به جای نام یک کلاس پایه، سایر عبارات دلخواه نیز مجاز است. برای مثال زمانی که کلاس پایه در ماژول دیگری تعریف شده باشد، این می تواند مفید باشد.
class DerivedClassName(modname.BaseClassName):
آموزش پایتون : روند اجرای تعریف یک کلاس مشتق شده همانند کلاس پایه است. زمانی که شی کلاس ساخته شود، کلاس پایه به یاد می آید. از این برای بر طرف کردن ارجاع های ویژگی استفاده می شود. اگر یک ویژگی درخواست شده در کلاس موجود نباشد، روند جستجو به بررسی کلاس پایه می پردازد. در صورتی که خود کلاس پایه نیز از کلاس دیگری مشتق شده باشد، این قانون به صورت بازگشتی اعمال می شود.
هیچ چیز خاصی درباره نمونه گیری از کلاس های مشتق شده و جود ندارد: DerivedClassName() یک نمونه جدید از کلاس ایجاد می کند. ارجاع های متد به این صورت انجام می شوند: ویژگی کلاس مربوطه جستجو می شود، در صورت لزوم از زنجیره کلاس های پایه پایین می آید، و اگر این به یک شی تابع برسد (اگر این عملیات به نتیجه برسد)، مرجع متد معتبر است.
کلاس های مشتق شده ممکن است متدهای کلاس های پایه خود را تغییر دهند. زیرا متدها در زمان فراخوانی سایر متدهای یک شی مشابه، هیچ امتیاز خاصی ندارند. یک متد از یک کلاس پایه، که متد دیگری که در همان کلاس پایه تعریف شده است را فراخوانی کند، ممکن است به فراخوانی یک متد از یک کلاس مشتق شده که آن را تغییر داده است منجر شود. (برای برنامه نویسان C++: تمامی متدهای پایتون به طور موثری مجازی (virtual) هستند.)
متد تغییر دهنده در یک کلاس مشتق شده ممکن است در واقع به جای جایگزینی متد کلاس پایه هم نام، صرفا بخواهد آن را توسعه دهد. یک روش ساده برای فراخوانی مستقیم متد کلاس پایه وجود دارد: فقط BaseClassName.methodname(self, arguments) را صدا کنید. همچنین این گاهی برای مشتری ها نیز مفید است. (توجه داشته باشید این تنها در صورتی که کلاس پایه به عنوان BaseClassName در حوزه سراسری قابل دسترس باشد، کار می کند. )
پایتون دارای دو تابع داخلی است که با وراثت کار می کنند:
  • برای بررسی نوع یک نمونه از isinstance() استفاده کنید: تنها در صورتی که obj.__class__ ، int باشد یا کلاسی مشتق شده از int ، isinstance(obj, int)، True خواهد بود.
  • برای بررسی وراثت کلاس از issubclass() استفاده کنید:‌ issubclass(bool, int) ، True است زیرا bool زیر کلاس int است. اگر چه issubclass(float, int) ، False است زیرا float زیر کلاس int نیست.

 

وراثت چندگانه در آموزش پایتون
همچنین پایتون از گونه ای از وراثت چندگانه (multiple inheritance) پشتیبانی می کند. تعریف یک کلاس با چندین کلاس پایه به صورت زیر است:
    class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-n>
</statement-n></statement-1>
برای بیشتر مقاصد، در ساده ترین حالت، می توانید جستجو برای ویژگی های به ارث رسیده از یک کلاس والد را به صورت اول-عمق، چپ –به- راست، در نظر بگیرید که در یک کلاس مشابه که همپوشانی در سلسله مراتب وجود دارد دو بار جستجو نکنید. بنابراین، اگر یک ویژگی در DerivedClassName یافت نشود، در Base1 جستجو شده است، سپس (به صورت بازگشتی) در کلاس پایه Base1 جستجو شده است، و اگر در آنجا نیز یافت نشود، در Base2 جستجو می شود و این روند ادامه دارد.
در حقیقت قضیه کمی پیچیده تر از این است. ترتیب وضوح متد، برای پشتیبانی از فراخوانی های مشارکتی super() به صورت پویا تغییر می کند. این روند در سایر زبان های وراثت چندگانه با عنوان فراخوانی متد بعدی (call-next-method ) شناخته شده است و بسیار قدرتمند تر از فراخوانی super() موجود در زبان های تک وراثتی است.
از آنجایی که همه موارد وراثت چندگانه، یک یا چند رابطه لوزی گون (جایی که حد اقل یکی از کلاس های والد می تواند از طریق چندین مسیر از پایین ترین کلاس دسترس پذیر باشد). را ارائه می کنند، مرتب سازی پویا ضروری است . برای مثال، تمامی کلاس ها از object ارث می برند، بنابراین هر موردی از وراثت چندگانه، بیشتر از یک مسیر برای دستیابی به object را فراهم می کند. برای جلوگیری از دسترسی به کلاس های پایه، بیشتر از یک بار، الگوریتم پویا به گونه ای ترتیب جستجو را خطی می کند که ترتیب چپ به راست مشخص شده در هر کلاس، که هر والد را فقط یک بار صدا میزند، را حفظ کند، و این یکنواخت است (به این معنی که یک کلاس می تواند بدون اثر گذاری روی ترتیب حق تقدم والدین خود، زیر کلاس شود). همه این ویژگی ها با هم، طراحی کلاس های قابل اطمینان و قابل توسعه با وراثت چندگانه را امکان پذیر می کند.

 

آموزش متغیر های خصوصی (Private) در برنامه نویسی پایتون
متغیر های نمونه خصوصی که از جایی غیر از درون یک شی قابل دسترس نباشند، در پایتون وجود ندارد. اگر چه قراردادی وجود دارد که توسط اکثر کدهای پایتون رعایت می شود: نامی که بعد از خط زیرین بیاید، مانند (_spam) باید به عنوان یک بخش غیر عمومی از API در نظر گرفته شود( چه یک تابع باشد یا یک متد یا یک عضو داده). این باید به عنوان جزییات پیاده سازی در نظر گرفته شود و بدون اطلاع قبلی تغییر کند.
از آنجایی که یک کاربرد معتبر برای اعضای خصوصی کلاس وجود دارد( برای جلوگیری از درگیری نام ها با نام های تعریف شده توسط زیر کلاس ها)، یک پشتیبانی محدود به نام ‘تغییرات نام’ (name mangling) برای چنین مکانیزمی وجود دارد.
هر شناسه ای در قالب __spam (حد اقل دو خط زیرین در قبل، حداکثر یک خط زیرین در ادامه) از لحاظ نگارشی با _classname__spam جایگزین می شود، که classname نام کلاس جاری است که خط زیرین قبل از آن حذف شده است. این تغییرات تا زمانی که درون تعریف کلاس رخ دهند ، بدون توجه به مکان نوشته شدن شناسه انجام می شوند.
تغییرات نام برای امکان پذیر کردن تغییر متدها توسط زیر کلاس ها، بدون شکستن فراخوانی های متد درون-کلاسی مفید هستند. برای مثال:
def __init__(self, iterable):
self.items_list = []
self.__update(iterable)
 
def update(self, iterable):
for item in iterable:
self.items_list.append(item)
 
__update = update # private copy of original update() method
 
class MappingSubclass(Mapping):
 
def update(self, keys, values):
# provides new signature for update()
# but does not break __init__()
for item in zip(keys, values):
self.items_list.append(item)
مثال بالا حتی اگر MappingSubclass مجبور به معرفی شناسه __update باشد نیز کار می کند، زیرا به ترتیب با _Mapping__update در کلاس Mapping ، و _MappingSubclass__update در کلاس MappingSubclass جایگزین شده است.
توجه داشته باشید، قوانین تغییرات اکثرا برای جلوگیری از تصادفات طراحی شده اند اما همچنان احتمال دسترسی یا تغییر متغیری که خصوصی فرض می شود وجود دارد. در بعضی شرایط خاص مانند اشکال زدایی، این امر می تواند حتی مفید باشد.
توجه کنید، کد پاس داده شده به exec() یا eval() ، نام کلاس صدا زننده کلاس را به عنوان کلاس جاری در نظر نمی گیرد. این مشابه اثر عبارت global است، اثری که به همین ترتیب به کدی که با هم کامپایل (byte-compiled) شده اند محدود می شود. همین محدودیت روی getattr() ، setattr() و delattr() ، و نیز در زمان ارجاع مستقیم به __dict__ اعمال می شود.
 

 

آموزش odds و ends در برنامه نویسی پایتون
گاهی اوقات داشتن یک نوع داده، مشابه record در پاسکال یا struct در C می تواند مفید باشد تا تعدادی آیتم داده نام گذاری شده را با هم جمع کنیم. یک تعریف کلاس خالی در اینجا مناسب خواهد بود:
class Employee:
pass
 
john = Employee() # Create an empty employee record
 
# Fill the fields of the record
john.name = 'John Doe'
john.dept = 'computer lab'
john.salary = 1000
یک قطعه کد پایتون که انتظار یک نوع داده انتزاعی خاص را دارد، اغلب می تواند از یک کلاسی که به جای آن، متدهای آن نوع داده را تقلید می کند، عبور داده شود . برای مثال، اگر تابعی داشته باشید که برخی داده ها را از یک شی فایل فرمت(format) می کند، می توانید یک کلاس با متد های read() و readline() تعریف کنید که داده را از بافر رشته دریافت کند و آن را به عنوان یک آرگومان پاس دهد.
اشیای متد نمونه نیز دارای ویژگی هستند: m.__self__ شی نمونه با متد m() است، و m.__func__ شی تابع متناظر با متد است.
آموزش پایتون ادامه دارد
  • افشین رفوآ
  • ۰
  • ۰
سلام عزیزان در این سری آموزشها با پایگاه داده Sql Server آشنا میشوید.
در قسمت قبل با مفاهیم زیر آشنا شدید:
با ادامه آموزش Sql server همراه باشید
 

 

آموزش عملگرهای AND و OR
عملگرهای AND و OR برای فیلتر کردن record ها براساس بیشتر از یک شرط استفاده می شوند .
عملگر AND رکوردی را نمایش می دهد که هم شرط اول و هم شرط دوم در آن صدق کند .
عملگر OR رکوردی را نمایش می دهد که یا شرط اول و یا شرط دوم در آن صدق کند.

 

نحوه استفاده از عمگرهای AND و OR در پایگاه داده
در این آموزش از نمونه پایگاه داده مشهور Northwind استفاده خواهیم کرد.
جدول زیر از میان جدول "Customers" انتخاب شده است.
 
استفاده از عملگر AND
دستور SQL زیر تمام customer ها را از کشور "Germany" و شهر "Berlin" از جدول "Customers" انتخاب می کند.
SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';
مثال استفاده از عملگر OR
دستور SQL زیر تمام customer ها را از شهر "Berlin" یا "Munchen" از جدول "Customers" انتخاب می کند.
SELECT * FROM Customers
 
WHERE Country='Germany'
 
AND (City='Berlin' OR City='München');
 

 

دستور ORDER BY در آموزش Sql server
کلید واژه ORDER BY برای مرتب کردن نتیجه result-set استفاده می شود .
کلید واژه ORDER BY برای مرتب کردن نتیجه result-set در یک یا چند ستون استفاده می شود .
کلید واژه ORDER BY به صورت پیش فرض record ها را به صورت صعودی مرتب می کند. برای مرتب کردن recordها به صورت نزولی می توانید از کلید واژه DESC استفاده کنید.
فرم استفاده از کلید واژه ORDER BY :
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC

 

نحوه استفاده از کلید واژه ORDER BY در پایگاه داده
در این آموزش از نمونه پایگاه داده مشهور Northwind استفاده خواهیم کرد. جدول زیر از میان جدول "Customers" انتخاب شده است:
 

 

مثال استفاده از کلید واژه ORDER BY
دستور SQL زیر تمام customer ها را از جدول "Customers" انتخاب می نماید در حالیکه آنها را بر اساس حرف اول ستون Country مرتب کرده است:
SELECT * FROM Customers
ORDER BY Country;
 

 

مثال استفاده از کلید واژه ORDER BY DESC
دستور SQL زیر تمام customer ها را از جدول "Customers" انتخاب می نماید در حالیکه آنها را بر اساس حرف اول ستون Country و به صورت نزولی مرتب کرده است:
SELECT * FROM Customers
ORDER BY Country DESC;

 

مثال استفاده از کلید واژه ORDER BY و انتخاب چندین ستون
دستور SQL زیر تمام customer ها را از جدول "Customers" انتخاب می نماید در حالیکه از اطلاعات ستون های (Country و Customer Name) استفاده کرده و جدول را بر اساس حرف اول این دو ستون و به صورت صعودی مرتب کرده است:
SELECT * FROM Customers
ORDER BY Country,CustomerName;
 
 
آموزش Sql server ادامه دارد.
  • افشین رفوآ
  • ۰
  • ۰
سلام عزیزان با آموزش جاوا اسکریپت در خدمت شما دوستان هستیم

 

آموزش رخدادادها event در جاوا اسکریپت
در HTML رخدادها، اتفاقاتی هستند که برای عناصر (HTML) روی می دهند. هنگامی که از جاوا اسکریپت در صفحات HTML استفاده می کنید، جاوا اسکریپت به محض اجرای (روی دادن) رخدادها واکنش نشان می دهند.

 

رخدادهای HTML در آموزش طراحی سایت
رخداد HTML ممکن است چیزی باشد که هم از طرف مرورگر و هم از طرف کاربر روی می دهد. نمونه هایی از رخدادهای HTML به ترتیب زیر می باشند. بار گذاری یک صفحه ی وب HTMLبه پایان رسیده یکی از فیلدهای ورودی (input field) HTML تغییر یافته یا اصلاح شده یک دکمه ی HTML روی صفحه کلیک شده اغلب پس از اینکه رویدادی (event) رخ می دهد، عملیات خاصی را می خواهیم پیاده کنیم. جاوا اسکریپت به مجرد اینکه رخدادی را شناسایی کند، اجازه ی اجرای کد مورد نظر را به برنامه نویس می دهد. HTML به خصیصه های event handler (کنترل گر و مدیریت کننده ی رخداد ها) که به کد جاوا اسکریپت (javascript code) الحاق شده اند اجازه ی متصل یا ضمیمه شدن به عناصر HTML را می دهد.

 

با تک کوتیشن (' ')
<some-html-element some-event='some JavaScript'>

 

با دابل کوتیشن (" ")
<some-html-element some-event="some JavaScript">
در مثال زیر خصیصه (attribute) onClick (به همراه کد)، به المان دکمه (تگ </button>) افزوده می شود.
مثال:

 

نمونه یک
<button onclick="getElementById('demo').innerHTML=Date()">The time is?</button>
همان طور که در مثال بالا مشاهده می کنید، کد جاوا اسکریپت محتوای المان مربوط را به وسیله ی شناسه ی "demo" تغییر می دهد. حال توجه خود را به نمونه ی بعدی جلب کنید که در آن کد محتوای المان خود را با استفاده از this.innerHTML تغییر می دهد.
مثال:

 

نمونه دو
<button onclick="this.innerHTML=Date()">The time is?</button>
نکته:
کد جاوا اسکریپت معمولا چندین خط ادامه دارد. رایج تر این است (بیشتر می بینید) که خصیصه ی رخدادها (event attribute) توابع را فراخوانی کنند.
مثال:

 

نمونه سه
<script>
function displayDate() {
document.getElementById("demo").innerHTML = Date();
}
</script>

 

رخدادهای معمول و پرکاربرد HTML
 
جاوا اسکریپت چه نقشی را ایفا می کند؟
اداره کننده ی رخدادها Event handler ها به منظور کنترل، بررسی، تایید درستی ورودی کاربر (user input) و عملیاتی که توسط کاربر انجام می شود و همچنین عملیات مرورگر مورد استفاده قرار می گیرد. کارهایی که باید با هر بار بارگذاری صفحه، انجام شود. کارهایی که باید با بسته شدن صفحه / هنگامی که صفحه بسته می شود، انجام گیرد. عملیاتی که باید پس از اینکه کاربر یک دکمه را فشار داد، پیاده شوند. محتوا (content) که باید به هنگام وارد شدن داده توسط کاربر، بررسی و تایید درستی شود و غیره..... روش های مختلفی هست که از طریق آن ها می توان به جاوا اسکریپت امکان همکاری و انجام عملیات با رخداد ها را داد، از جمله خصیصه های رخداد HTML خود می توانند (به طور) مستقیم کد جاوا اسکریپت را اجرا کنند. خصیصه های رخداد HTML می توانند توابع جاوا اسکریپت را صدا بزنند.(فراخوانی کنند) برنامه نویس می تواند توابع اداره کننده ی رخداد خود را به المان های HTML تخصیص دهد. برنامه نویس می تواند از ارسال، مدیریت و دستکاری رخدادها جلوگیری کند و غیره.....
 

 

آموزش حوزه ی دسترسی در جاوا اسکریپت / JavaScript Scope
 
در جاوا اسکریپت توابع (functions) و اشیا (objects) نیز متغیر تلقی می شوند. در زبان مبتنی بر اشیا جاوا اسکریپت، scope به مجموعه ی از متغیرها، اشیا و توابع گفته می شود که شما به آن ها دسترسی دارید. حوزه یا scope جاوا اسکریپت توابع هستند و اینscope ها داخل تابع تغییر یافته و تعریف می شوند.

 

متغیرهای محلی جاوا اسکریپت
متغیرهایی که داخل یک تابع تعریف می شوند، در واقع متغیرهای محلی / local آن تابع محسوب می شوند. متغیرهای محلی (local variables)، حوزه دسترسی یا scope آن ها نیز محلی تلقی می گردد، بدین معنا که دسترسی به آن ها تنها داخل خود تابع امکان پذیر می باشد.
مثال:

 

نمونه یک
<script>
myFunction();
document.getElementById("demo").innerHTML =
"I can display " + typeof carName;
 
function myFunction() {
var carName = "Volvo";
}
</script>
 
از آنجایی که متغیرهای محلی تنها داخل توابع مختص به خود شناخته می شوند، متغیرهایی که با متغیرهای محلی (داخل تابع مربوط) هم نام هستند، می توانند در توابع دیگر بکار گرفته شوند، به عبارتی روشن تر شما می توانید در توابع مختلف، متغیرهای محلی با نام های یکسان داشته باشید.(متغیرهای محلی تنها توسط آن تابعی که آنها را معرفی کرده شناخته می شوند). متغیرهای محلی زمانی ایجاد می شوند که تابعی راه اندازی شود (کار خود را آغاز کند) و هنگامی نیز حذف می گردند که تابع عملیات خود را به پایان رسانده باشد / متغیرهای محلی مجرد اینکه عملیات تابع تکمیل شد، خود به خود حذف می گردند.

 

متغیرهای سراسری / عمومی (global variables)
متغیری که بیرون یک تابع تعریف شود، متغیر Global (سراسری) نامیده می شود. یک متغیر سراسری دارای حوزه ی دسترسی سراسری است، بدین معنا که کلیه ی اسکریپت ها و توابع موجود در یک صفحه ی وب امکان دستیابی به آن را دارند.
مثال:

 

نمونه دو
var carName = "Volvo";
myFunction();
 
function myFunction() {
document.getElementById("demo").innerHTML =
"I can display " + carName;
}
اگر به متغیری که هنوز تعریف یا اعلان نشده مقداری تخصیص دهیم، آن متغیر خودکار یک متغیر سراسری (global) تلقی می گردد. در نمونه کد ذیل با اینکه carName داخل یک تابع تعریف شده، اما یک متغیر سراسری تلقی می گردد (زیرا که متغیر مورد نظر از پیش اعلان نگردیده است).
مثال:

 

نمونه سه
<script>
myFunction();
document.getElementById("demo").innerHTML =
"I can display " + carName;
 
function myFunction() {
carName = "Volvo";
}
</script>

 

طول عمر متغیرها (Lifetime of varabiles)
طول عمر یک متغیر جاوا اسکریپت درست از زمانی که آن متغیر اعلان می گردد، آغاز گشته و حساب می شود. همان طور که پیش تر ذکر شد عمر یک متغیر محلی محدود به زمان شروع اجرا و تکمیل عملیات تابع است، یعنی بمحض اینکه تابع تکمیل شود متغیر محلی نیز عمرش به پایان رسیده و حذف می شود. متغیرهای سراسری یا عمومی نیز هنگامی که صفحه ی وب بسته می شود، همگی حذف می گردند.

 

آرگومان های تابع (function arguments)
آرگومان (پارامتر) های یک تابع به عنوان متغیرهای محلی داخل آن تابع عمل می کنند.

 

متغیرهای سراسری در HTML
حوزه دسترسی سراسری (global scope) در جاوا اسکریپت شامل کل محیط جاوا اسکریپت می شود (از هرجای جاوا اسکریپت یا نقطه ی صفحه می توان به متغیرها دسترسی پیدا کرد). در HTML، حوزه ی عمومی یا سراسری (Global Scope) شی window را شامل می شود: تمامی متغیرهای سراسری متعلق به شی window هستند و از این رو می توان از هر نقطه ی از شی window به متغیرهای عمومی دسترسی پیدا کرد.
مثال:

 

نمونه چهار
<script>
myFunction();
document.getElementById("demo").innerHTML =
"I can display " + window.carName;
 
function myFunction() {
carName = "Volvo";
}
</script>
توجه:
آیا می دانستید که متغیرها (یا توابع) سراسری می تواند متغیرها و توابع متعلق به شی window را بازنویسی / overwrite کنند؟ هر تابعی، حتی خود شی window، قادر است متغیرها و توابع سراسری را بازنویسی کند.
در قسمت بعد رشته ها در جاوا اسکریپت را فرا می گیرید
  • افشین رفوآ
  • ۰
  • ۰
سلام دوستان...
در این قسمت از آموزش پایتون نگاه اولیه به کلاس ها داریم :
کلاس ها مقدار کمی نحو(syntax) جدید را معرفی می کنند، از جمله سه نوع شی جدید و برخی مفاهیم(semantics) جدید.

 

آموزش نحوه تعریف کلاس در Python
ساده ترین حالت تعریف کلاس به صورت زیر است:
class ClassName:
<statement-1>
.
.
.
<statement-n>
</statement-n></statement-1>
 
تعاریف کلاس، مانند تعاریف تابع(عبارت def) باید پیش از اینکه اثری داشته باشند، اجرا شوند. (می توانید تعریف یک کلاس را در شاخه ای از یک عبارت if یا درون یک تابع قرار دهید.)
در عمل، عبارات درون تعریف یک کلاس، معمولا تعاریف تابع خواهند بود، اما عبارات دیگر نیز مجار هستند و گاهی مفید—بعدا به این موضوع خواهیم پرداخت. تعاریف تابع درون یک کلاس معمولا یک شکل عجیبی از لیست آرگومان ها دارند، که توسط قراردادهای فراخوانی متدها نوشته شده اند—دوباره می گویم، این موضع بعدا توضیح داده خواهد شد.
وقتی تعریف یک کلاس وارد شود، یک فضای نام جدیدی ساخته می شود و به عنوان حوزه محلی استفاده می شود—بنابراین، تمامی تخصیص ها به متغیر های محلی، به این فضای نام جدید می روند. به خصوص، تعاریف تابع، نام تابع جدید را در اینجا اتصال می دهند.
زمانی که تعریف یک کلاس به صورت نرمال قرار گیرد(از طریق پایان)، یک شی کلاس ساخته می شود. این اساسا یک بسته بندی حول محتویات فضای نامی است که توسط تعریف کلاس ایجاد شده است. در بخش بعدی مباحث بیشتری درباره اشیای کلاس فرا خواهیم گرفت. حوزه محلی اصلی ( حوزه ای که دقیقا قبل از تعریف کلاس وارد شده است) باز گردانده شده است، و شی کلاس، به نام کلاس که در سربرگ تعریف کلاس است، محدود شده است. (ClassName در مثال).

 

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

 

آموزش Class Objects در پایتون
اشیای کلاس از دو نوع عملیات پشتیبانی می کنند: ارجاع های ویژگی (attribute references) و نمونه گیری (instantiation).
ارجاع های ویژگی، از نحوه نگارش استاندارد مورد استفاده برای تمامی ارجاع های ویژگی در پایتون، استفاده می کنند: obj.name . تمامی نام های موجود در فضای نام کلاس، در زمان ساخت شی کلاس، نام های معتبر ویژگی هستند. بنابراین اگر تعریف کلاس به صورت زیر باشد:
class MyClass:
"""A simple example class"""
i = 12345
 
def f(self):
return 'hello world'
پس MyClass.i و MyClass.f ارجاع های ویژگی معتبر هستند، که به ترتیب یک عدد صحیح و یک شی تابع را باز می گردانند. همچنین می توان به ویژگی های کلاس مقداری را تخصیص داد، بنابراین می توانید مقدار MyClass.i را با تخصیص، تغییر دهید. __doc__ نیز یک ویژگی معتبر است، که docstring متعلق به کلاس "A simple example class" را باز می گرداند. نمونه گیری کلاس از نمادگذاری تابع استفاده می کند. فقط وانمود کنید که شی کلاس یک تابع بدون پارامتر است که یک نمونه جدید از کلاس را باز می گرداند. برای مثال(کلاس بالا را در نظر بگیرید):
x = MyClass()
عبارت بالا یک نمونه جدید از کلاس را ایجاد می کند و این شی را به متغیر محلی x تخصیص می دهد. عمل نمونه گیری (صدا زدن یک شی کلاس) یک شی خالی را ایجاد می کند. بسیاری از کلاس ها، تمایل به ایجاد اشیا با نمونه هایی که برای یک حالت اولیه خاص سفارشی شده باشند، دارند. بنابراین ممکن است یک کلاس یک متد خاص به نام __init__() را به صورت زیر تعریف کند:
def __init__(self):
self.data = []
زمانی که یک کلاس متد __init__() را تعریف می کند، نمونه گیری کلاس، به صورت خودکار __init__() را برای نمونه تازه ساخته شده کلاس فراخوانی می کند. بنابراین در این مثال، یک نمونه جدید و مقدار دهی اولیه شده توسط عبارت زیر قابل دستیابی است:
x = MyClass()
البته که متد __init__() میتواند برای انعطاف پذیری بیشتر دارای آرگومان باشد. در این صورت، آرگومان های داده شده به عملگر نمونه گیری کلاس، به __init__() پاس داده می شوند. برای مثال:
>>> class Complex:
... def __init__(self, realpart, imagpart):
... self.r = realpart
... self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)

 

آموزش اشیای نمونه (instance objects) در Python
حال با اشیای نمونه چه کار می توان کرد؟ تنها عملیات قابل فهم توسط اشیای نمونه، ارجاع های ویژگی هستند. دو نوع نام ویژگی معتبر وجود دارد: ویژگی های داده (data attributes) و متدها.
ویژگی های داده” متناظر است با “متغیر های نمونه” در Smalltalk و "اعضای داده” در C++ . ویژگی های داده نیازی به اعلان شدن ندارند؛ آنها همانند متغیر های محلی، در اولین جایی که مقداری به آنها تخصیص یابد، به وجود می آیند. برای مثال، اگر x نمونه MyClass که در بالا ایجاد شد، باشد، قطعه کد زیر مقدار 16 را بدون برجای گذاشتن ردی چاپ خواهد کرد.
x.counter = 1
while x.counter < 10:
x.counter = x.counter * 2
print(x.counter)
del x.counter
نوع دیگری از ارجاع ویژگی نمونه (instance attribute reference)، متد است.
یک متد تابعی است که متعلق به یک شی است. ( در پایتون، واژه متد تنها مختص به نمونه های کلاس نیست: سایر انواع شی هم می توانند متد داشته باشند. برای مثال، اشیای لیست، متدهایی به نام های append ، insert ، remove ، sort و غیره دارند. اگر چه در مباحث بعدی منحصرا از واژه متد برای بیان متدهای اشیای نمونه کلاس استفاده می شود، مگر اینکه صریحا خلاف آن بیان شود.)
نام های معتبر متد مربوط به یک شی نمونه، به کلاس آن بستگی دارد. در تعریف، تمامی ویژگی های یک کلاس که اشیای تابع هستند، متدهای متناظر با نمونه های آن را تعریف می کنند. بنابراین در مثال ما، از آنجایی که MyClass.f یک تابع است، x.f یک ارجاع معتبر متد است. اما x.i (معتبر)نیست، زیرا MyClass.i (یک تابع) نیست. اما x.f چیزی مشابه MyClass.f نیست—این یک شی متد است، نه یک شی تابع.

 

اشیای متد (method objects) در آموزش پایتون
معمولا یک متد دقیقا پس از بسته شدن (bound)، فراخوانی می شود:
x.f()
در مثال MyClass ، رشته 'hello world' باز گردانده می شود. اگر چه، فراخوانی بلافاصله یک متد، ضروری نیست: x.f یک شی متد است، و می تواند در زمانی دیگر ذخیره و صدا زده شود. برای مثال:
xf = x.f
while True:
print(xf())
تا آخر زمان به چاپ hello world ادامه می دهد. زمانی که یک متد فراخوانی می شود، دقیقا چه اتفاقی می افتد؟ ممکن است متوجه شده باشید که x.f() در بالا بدون آرگومان فراخوانی شده است، هر چند که تعریف تابع برای f() یک آرگومان مشخص کرده است. چه اتفاقی برای آرگومان افتاد؟ زمانی که تابعی نیاز به یک آرگومان دارد و بدون آرگومان فراخوانی می شود، پایتون حتما استثنایی را اعلام می کند—حتی اگر آن آرگومان واقعا استفاده نشده باشد.
در واقع ممکن است پاسخ را حدس زده باشید: نکته خاص درباره متد ها این است که شی نمونه به عنوان اولین آرگومان تابع پاس داده می شود. در مثال ما، فراخوانی x.f() دقیقا برابر با فراخوانی MyClass.f(x) است. به طور کلی، فراخوانی یک متد با لیستی از n آرگومان، برابر است با فراخوانی تابع متناظر آن، با لیستی از آرگومان ها که به واسطه درج شی نمونه متد، قبل از اولین آرگومان ساخته شده است.
اگر همچنان متوجه نحوه عملکرد متدها نمی شوید، نگاهی به پیاده سازی احتمالا میتواند قضیه را روشن کند. زمانی که یک ویژگی غیر داده از یک نمونه، ارجاع یافته باشد، کلاس نمونه جستجو می شود. اگر نام، یک ویژگی کلاس معتبر که یک شی تابع است را نشان دهد، یک شی متد به واسطه جمع کردن(اشاره گر ها به) شی نمونه و شی تابع که با هم در یک شی abstract پیدا شده اند، ساخته میشود: این شی متد است. زمانی که شی متد به همراه لیستی از آرگومان ها فراخوانی شده باشد، یک لیست آرگومان جدید از شی نمونه و لیست آرگومان ها ساخته می شود، و شی تابع با لیست آرگومان جدید فراخوانی می شود.

 

آموزش متغیر های کلاس و نمونه در برنامه نویسی Python
به طور کلی، متغیر های نمونه برای داده هستند و برای هر نمونه یکتا هستند. متغیر های کلاس برای ویژگی ها و متدها هستند و بین همه نمونه های کلاس به اشتراک گذاشته می شوند.
class Dog:
 
kind = 'canine' # class variable shared by all instances
 
def __init__(self, name):
self.name = name # instance variable unique to each instance
 
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.kind # shared by all dogs
'canine'
>>> e.kind # shared by all dogs
'canine'
>>> d.name # unique to d
'Fido'
>>> e.name # unique to e
'Buddy'
همانطور که در بخش سخنی درباره نام ها و اشیا بحث شد، داده های اشتراکی می توانند تاثیرات احتمالی شگفت انگیزی با اشیای تغییر پذیر درگیر مانند لیست ها و دیکشنری ها داشته باشند. برای مثال، لیست tricks در کد زیر نباید به عنوان متغیر کلاس استفاده شود زیرا تنها یک لیست توسط همه نمونه های Dog به اشتراک گذاشته می شود.
طراحی صحیح کلاس، باید به جای آن از یک متغیر نمونه استفاده کند.
    class Dog:
 
    def __init__(self, name):
        self.name = name
        self.tricks = []    # creates a new empty list for each dog
 
    def add_trick(self, trick):
        self.tricks.append(trick)
 
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.add_trick('roll over')
>>> e.add_trick('play dead')
>>> d.tricks
['roll over']
>>> e.tricks
['play dead']

 

آموزش (random remarks) در برنامه نویسی پایتون
اگر یک نام ویژگی(attribute name) مشابه هم در یک نمونه و هم در یک کلاس رخ دهد، سپس جستجوی ویژگی، نمونه را اولویت بندی می کند.
>>> class Warehouse:
purpose = 'storage'
region = 'west'
 
>>> w1 = Warehouse()
>>> print(w1.purpose, w1.region)
storage west
>>> w2 = Warehouse()
>>> w2.region = 'east'
>>> print(w2.purpose, w2.region)
storage east
ویژگی های داده همانطور که توسط کاربران معمولی (مشتری ها) یک شی ارجاع داده می شوند، ممکن است توسط متدها نیز ارجاع یابند. به بیان دیگر، کلاس ها برای پیاده سازی انواع داده انتزاعی خالص قابل استفاده نیستند. در حقیقت، هیچ چیزی در پایتون، اجبار به پنهان سازی داده را ممکن نمی کند—همه چیز بستگی به قرارداد دارد. ( از طرف دیگر، پیاده سازی پایتون، نوشته شده در C، می تواند به طور کامل جزییات پیاده سازی را پنهان کند و دسترسی به یک شی را در صورت نیاز کنترل کند. توسط ضمیمه های پایتون که به C نوشته شده است، می توان از این استفاده کرد. )
مشتری ها (Clients) باید با احتیاط از ویژگی های داده استفاده کنند—مشتری ها ممکن است ثابت های(invariants) نگهداری شده توسط متد ها را با مهر زدن روی ویژگی های داده آنها اشتباه بگیرند. توجه داشته باشید که ممکن است مشتری ها ویژگی های داده خود را بدون تاثیر گذاری روی اعتبار متدها، به یک شی نمونه اضافه کنند، البته تا زمانی که از ناسازگاری بین نام ها پرهیز شود—مجددا می گویم، قرارداد های نام گذاری می تواند مانع بسیاری از دردسرها در اینجا شود.
هیچ گونه اختصار نویسی برای ارجاع ویژگی های داده(یا سایر متدها) از درون متدها وجود ندارد. در واقع به نظر من این خوانایی متدها را افزایش می دهد: در نگاه کلی به یک متد، امکان اشتباه و سر در گمی بین متغیرهای محلی و متغیرهای نمونه به هیچ وجه وجود ندارد.
اغلب اولین آرگومان یک متد self نام دارد. این فقط یک قرارداد است. نام self مطلقا هیچ معنی خاصی برای پایتون ندارد. هر چند توجه داشته باشد که با رعایت نکردن قراردادها، ممکن است کد شما برای سایر برنامه نویسان پایتون از خوانایی کمتری برخوردار باشد. همچنین ممکن است یک برنامه مرورگر کلاس با تکیه بر چنین قراردادهای نوشته شود.
هر شی تابعی که یک ویژگی کلاس باشد، یک متدی را برای نمونه های آن کلاس تعریف می کند. ضروری نیست که تعریف تابع به صورت نوشتاری درون تعریف کلاس قرار گیرد (محصور باشد). تخصیص یک شی تابع به یک متغیر محلی درون کلاس نیز کفایت می کند. برای مثال:
# Function defined outside the class
def f1(self, x, y):
    return min(x, x+y)
class C:
    f = f1
    def g(self):
        return 'hello world'
    h = g
حال f,g و h همه ویژگی های کلاس c هستند که به اشیای تابع رجوع می کنند، و متعاقبا همه آنها متدهای نمونه های c هستند – h دقیقا برابر است با g. توجه داشته باشید که معمولا این عمل تنها برای سر در گم کردن خواننده برنامه انجام می شود.
ممکن است متدها با استفاده از ویژگی های متد آرگومان self، سایر متدها را فراخوانی کنند.
class Bag:
def __init__(self):
self.data = []
 
def add(self, x):
self.data.append(x)
 
def addtwice(self, x):
self.add(x)
self.add(x)
متدها ممکن است به همان شیوه مشابه ارجاع توابع معمولی، نام های سراسری را ارجاع دهند. حوزه سراسری مربوط به یک متد، ماژولی است که در بردارنده تعریف آن است. (یک کلاس هرگز به عنوان یک حوزه سراسری استفاده نمی شود.) درحالی که به ندرت به دلیل خوبی برای استفاده از داده سراسری در یک متد بر میخوریم، کاربرد های درست و قانونی بسیاری از حوزه سراسری وجود دارد: یک مورد این است که، توابع و ماژول های وارد شده به حوزه سراسری می توانند مانند توابع و کلاس های تعریف شده در آن، توسط متدها استفاده شوند. معمولا کلاسی که در بردارنده متد است، خود نیز درون حوزه سراسری تعریف شده است. در بخش بعد دلایل خوبی برای اینکه چرا یک متد ممکن است بخواهد به کلاس خود ارجاع دهد، را بیان می کنیم.
هر مقدار، یک شی است و بنابراین یک کلاس دارد(نوع آن نیز نامیده می شود) و به عنوان object.__class__ ذخیره می شود.
آموزش پایتون ادامه دارد
  • افشین رفوآ