Archive for 2008/11

تعریف ویژگی ها (Properties) در جاوا اسکریپت

۱۳۸۷/۰۹/۰۸ ۲۲:۲۱ Salar Khalilzadeh https://plus.google.com/105397214522932500988 منتشر شده در تاریخ : ۱۳۸۷/۰۹/۰۸ دسته بندی : ، ، ، 6

یکی از امکانات نسخه های جدید JavaScript پشتیبانی از ویژگی ها (Property) هست. اگر با سایر زبان های برنامه نویسی آشنایی داشته باشید، مطمئنن می دانید که ویزگی ها یکی از بخش های جدایی ناپذیر زبانهای برنامه نویسی OOP هستند.

ویژگی ها این امکان را فراهم می کنند که بر روی مقادیر متغیرهای خود کنترل داشته باشید و حق دسترسی برای آنها جهت ویرایش تعیین کنید. همچنین می توان داده های وارده را فیلتر کرده تا فقط محدوده و داده های مورد نظر اعمال شوند.

با این مقدمه می خواهم چند روش تعریف ویژگی ها در جاوا اسکریپت مطرح کنم.

تعریف اول:

جاوا اسکریپت زبان بسیار ساده ای است. ابجکت ها (یا اشیا) در جاوا اسکریپت چیزی بیش از مجموعه ای از کلید ها و مقادیر نیستند. به این معنی که برای دسترسی به عضوی از یک شیئ می توانید همانند یک آرایه با آن رفتار کنید.

برای مثال برای افزودن یک عضو به یک شیئ به مثال زیر توجه کنید:
var thing = new Object();
thing[ “prop1” ] = “Hello”;

در این مثال ما عضو جدیدی به نام prop1 را به thing اضافه کردیم. مقدار prop1 برابر Hello خواهد بود. روش دیگری هم برای افزودن عضو به شیئ مورد وجود دارد. به مثال زیر توجه کنید:
var thing = new Object();
thing.prop1 = “Hello”;

روش دیگر برای معرفی اشیا استفاده از لیتراتهای ابچکت هست که نتیجه ای دقیقا مانند دو مثال قبلی دارد:
var thing = {prop1 : “Hello”};

استفاده از مقدار prop1 بسیار ساده است می توان همانند یک آرایه یا یک ویژگی از آن استفاده کرد:
var thing = new Object();
thing.prop1 = “Hello”;
alert( thing[“prop1”] );
thing.prop1 = “Hello Again!”;
alert( thing.prop1 );

روش دوم:

روشی که در بالا توضیح دادم خیلی ساده و کاربردی است ولی تنها محدودیتی که دارد این است که امکان کنترل بر داده هایی که قبول می کند و یا مقداری که باید برگرداند وجود ندارد.

برای رفع این مشکل شرکت Mozilla راه حلی را ارائه کرده است که به مرور سایر مرورگر ها نیز از آن پشتیبانی می کنند.

این روش چیزی جز کلمات کلیدی get و set نیست.
var thing =  {
_price: 0,
get price() { return this._price; },
set price(value)
{
if (value < 0)
throw "price must be greater than zero";
this._price = value;
}
};

در این مثال شیئ با نام thing تعریف شده است. این شیئ دارای یک متغیر با نام price_ و ویژگی price هست که با استفاده از یک متد get و یک متد set تعریف شده است.

به طور ساده تر زمانی که می خواهید مقداری را از ویزگی price بخوانید تابع معرفی شده در مقابل get فراخوانی خواهد شد و همچنین، هنگام مقدار دهی به price تابع معرفی شده در مقابل set فراخوانی خواهد شد.

همانطور که می بینید ویزگی price در هنگام عمل set مقدار ورودی را بررسی می کند و اگر کوچکتر از صفر باشد خطایی را تولید خواهد کرد.

نمونه استفاده از کد بالا:
// مقدار دهی
thing.price = 5;
// نمایش مقدار
alert( thing.price );
// مقدار نامعتبر و تولید خطا
thing.price = -10;

متاسفانه از این روش مرورگر های کمی پشتیبانی می کنند و در حال حاظر مرورگرهای Firefox و Safari 3 و Opera 9.5 از آن پشتیبانی می کنند.

روش سوم:

این روش را مرورگر Firefox برای استفاده در خودش طراحی کرده و در سایر مرورگرها کار نخواهد کرد. روش بسیار جالبی است و ساده تر از روش قبلی می باشد.
var thing =
{
_price: 0
};
thing.__defineGetter__("price", function(){ return this._price; });
thing.__defineSetter__("price", function(value)
{
if (value < 0)
throw "price must be greater than 0";
this._price = value;
}
);

در این مثال ابتدا شیئ thingتعرفی می شود. سپس با استفاده از تابع __defineGetter__ متد get با برای ویژگی price تعریف می شود. این تابع دو ورودی دارد که اولی نام ویژگی مورد نظر است و دومی رفرنسی به تابع مورد نظر برای get. البته در این مثال تابع در همان جا تعریف شده است.

تابع __defineSetter__ همانند __defineGetter__ عمل می کند و فقط برای اضافه کردن تعریف set به ویژگی مورد نظر مورد استفاده است. در این مثال تابع مربوط به set در همان خط تعریف شده و مقدار ورودی را برای مقادیر کمتر از صفر کنترل می کند.

همانند مثال قبلی این مثال نیز کار خواهد کرد:
// مقدار دهی
thing.price = 5;
// نمایش مقدار
alert( thing.price );
// مقدار نامعتبر و تولید خطا
thing.price = -10;

روش چهارم:

در این روشی که می خوام معرفی کنم، واقعا ویژگی ها را پیاده سازی نمی کند ولی مانند یک ویژگی عمل می کنه و می تونه در کار شما مفید واقع بشه. در این روش در حقیقت ما دو تابع جداگانه برای خواندن و نوشتن در متغیر تعریف می کنیم و کارهای مورد نظر را در داخل آنها انجام می دهیم.
function thing()
{
var _price = 0;
this.getPrice = function(){
return _price;
};
this.setPrice = function(val){
if (val < 0)
throw "price must be greater than 0";
_price = val;
};
}

در این مثال شیئ thing به عنوان یک تابع تعریف شده است که می توان از روی متغیر و اشیا دیگری هم ساخت. در داخل این تابع دو تابع getPrice برای خواندن و setPrice برای نوشتن در متغیر _price تعریف شده است.
// ایجاد نمونه جدید از تابع تعریف شده
var product= new thing();
// دسترسی متقیم به متغیر داخلی
alert(product._price);
//مقدار دهی با استفاده از تابع
product.setPrice(2);
// دسترسی به مقدار با استفاده از تابع مربوطه
alert( product.getPrice() );
// مقدار با یک مقدار نامعتبر و دریافت خطا
product.setPrice( -4 );

با این اوصاف مشاهده می کنید که javascript روز به روز قوی تر می شود، مخصوصا که Web 2 بسیار به javascript وابسته هستند.

موفق باشید

منابع:

http://weblogs.asp.net/stephenwalther/archive/2008/02/29/creating-javascript-properties-in-asp-net-ajax.aspx
http://ejohn.org/blog/javascript-getters-and-setters/
http://ajaxian.com/archives/getters-and-setters-in-javascript

 

نقاشی از مردی پیر

۱۳۸۷/۰۹/۰۴ ۲۲:۲۳ Salar Khalilzadeh https://plus.google.com/105397214522932500988 منتشر شده در تاریخ : ۱۳۸۷/۰۹/۰۴ دسته بندی : ، ، 3

این نقاشی رو که میبینید می بینید برادرم کشیده. برام جالبه و نگاه عجیبی داره.

mybro-painting-oldmanبرادر من یه نقاشه، البته زیاد نقاشی نمی کنه ولی با این حال، شاید هر از گاهی نقاشی هاش رو اینجا گذاشتم.

در ضمن اخیرا یه کم مشغله ام زیاد شده و نمی تونم زیاد پست کنم، ببینیم کی آزادی فکری بیشتری پیدا می کنم تا بتونم بیشتر بنویسم.

خوش باشین.

 

12 نکته برای افزایش سرعت کدنویسی در Visual Studio

۱۳۸۷/۰۸/۲۵ ۳:۴۰ Salar Khalilzadeh https://plus.google.com/105397214522932500988 منتشر شده در تاریخ : ۱۳۸۷/۰۸/۲۵ دسته بندی : ، ، 2

نسخه های اخیر Visual Studio یعنی 2005 و 2008 کلید های میانبر و ابزارهای متفاوتی را عرضه کرده اند که به برنامه نویس اجازه می دهد با فشردن چند کلید در عوض رفتن به میان منو های مختلف، به راحتی به مقصود خود برسد.

این ابزارها و کلید های میانبر در سرعت نوشتن کد تاثیر زیادی دارند و باعث حفظ تسلط بر روی کد می شوند.

در این مقاله سعی می کنم تا به این نکات بپردازم و سعی خواهم کرد تا بدون نیاز به ماوس، کارهای مورد نظر رو توضیح بدم.

  • اضافه کردن namespace به صورت خودکار


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

در این حالت تنها کافی است که نام کلاس رو وارد کرده و کلید .+CTLR (کلید کنترل همراه با نقطه) را بزنید. در این صورت منویی ظاهر خواهد شد. در این منو فضای نام مورد نظرتون رو با ماوس و یا کلید های بالا و پایین صفحه کلید انتخاب کرده و اینتر را بزنید. در این صورت آن فضای نام به صورت خودکار به فایل اضافه خواهد شد:

suggestion



این ویژگی برای VS 2005 و VS 2008 کار می کند

  • استفاده از الگوهای کد نویسی


تکه الگو های کد یا code snippet ها تکه کد هایی هستند که تمامی یک عبارت را به صورت خودکار درج می کنند.

این تکه الگو ها به چند روش در دسترس هستند. برای مشاهده و انتخاب از لیست کلید های CTRL+K و CTRL+X رو فشار دهید. در لیست نمایش داده شده می توانید یکی از را اتخاب کنید که در این صورت کد مربوط به آن الگو درج خواهد شد.

روش بعدی، وارد کردن نام الگو و سپس فشردن دوبار کلید tab هست. برای مثال برای درج الگوی ویژگیها (Property) به این صورت عمل کنید: prop + tab +tab

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

snippetچند نمونه از الگوها:

درج الگوی try..catch: try+tab+tab


درج الگوی try..finally: tryf+tab+tab


حلقه for: for+tab+tab


شرط switch: switch+tab+tab


پراپرتی فقط خواندنی همراه با متغیر: propg+tab+tab




  • مرتب سازی و حذف ورودی های کلاس (using یا Imports) های زاید


برنامه نویسان معمولا در مزان کد نویسی تعدادی ورودی را به کلاسشان اضافه می کنند که ممکن است به سبب تغییراتی که بعدا در کدهایشان می دهند دیگر نیازی به آنها نداشته باشند. همچنین ممکن است به خاطر افزوده شدن ورودی ها به مرور زمان این ورودی ها کمی به هم ریخته به نظر بیاند.

برای رفع این مشکل در محیط کد نویسی بر روی صفحه کلید راست کنید تا منو باز شود. در زیر منوی Organize usings چند گزینه وجود دارد که می توانید از آنها برای ویرایش ورودی های کلاس استفاده کنید. مقصود ما فعلا گزینه Remove and sort   است که باعث حذف شدن موارد زاید و مرتب سازی بقیه آنها می شود:

remove-sort

این ویژگی فقط بر روی VS 2008 کار می کند

  • تبدیل به توضیح کردن و یا غیر فعال کردن چندین خط کد


ممکن است خواسته باشید که چندین خط کد را یکباره غیرفعال و یا اینکه به توضیح تبدیل کنید. در این حالت فقط کافی است که متن مورد خودتان را انتخاب کرده و از ترکیب کلید های CTRL+K و CTRL+C استفاده کنید.

برای برگرداندن به حالت اولیه در متون انتخاب شده از ترکیب کلید های CTRL+Kو CTRL+U استفاده کنید.

این مورد در تمامی ویرایشگر های VS قابل استفاده است. از جمله html و javascript و vb.net و web.config و ..

  • ایجاد خودکار ویژگها (Property) از روی متغیر


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

برای این منظور بر روی متغیر قرار گرفته و کلید های CTRL+E و CTRL+R را فشار دهید. در این صورت پنجره ای ظاهر خواهد شده که همراه با چند وِیژگی دیگر نامی را پیشنهاد خواهد داد. پنجره را تایید کنید تا وِیژگی ایجاد شود.

نکته ای لازم به ذکر هست که برای گرفتن نتایج خوب از این روش باید نام متغیرهای خودتون را با (_) شروع کنید.

encapsulate-field

  • فرمت کردن و منظم کردن کد تنها با فشار چند کلید


معمولا کدی که می نویسیم کاملا مرتب نیست و کمی به هم ریخته به نظر می رسد. فاصله ها رعایت نشده و یا اینکه کد ها منظم نوشته نشده اند. در نسخه های 2005 و 2008 این امکان فراهم شده است تا کد نوشته شده به صورت خودکار فرمت و قالب دهی شود. میتوانید به جای صرف وقت برای تنظیم و مرتب کردن کد به صورت دستی از این کلید میانبر استفاده کنید.

ترکیب کلیدهای CTRL+K و CTRL+D

  • کپی، بریدن و درج یک خط به صورت سریع


برای کپی کردن و یا بردین یک سطر از کدتان لازم نیست که حتما آن خط را انتخاب کنید.

برای این منظور روی خط مورد نظر قرار گرفته و برای کپی کردن کلید CTRL+C و برای بریدن کلید CTRL+X و برای درج کردن از حافظه کلید CTRL+V را فشار دهید.

  • کلیدهای میانبری دیگری برای کپی، بریدن و درج


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

Copy: CTRL+Insert


Cut: Shift+Del


Paste: Shift+Insert




  • کامل کردن خودکار نام متغیر ها و کلاس ها


در هنگام نوشتن کد اگر نام متد و یا کلاسی را کامل به یاد نمی آورید و یا اینکه چند حرف اول آن را به یاد می آورید، کافی هست که چند حرف اول را تایپ کرده و ترکیب کلید های CTRL+Space را فشار دهید.

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

  • دسترسی به لیست کلاسها در محیط ویرایش گر کد


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

برای دسترسی به این لیست بدون نیاز به ماوس از ترکیب کلید های CTRL+F2 استفاده کنید.

navigationbar

  • کامپایل پروژه و اجرای آن و انصراف از کامپایل


برای اینکه کد خود را کامپایل کنید لازم نیست که حتما از منوها اقدام کنید. از ترکیب کلیدهای زیر استفاده کنید.

کامپایل تمامی solution: ترکیب CTRL+Shit+B

لغو کامپایل (زمانی که برنامه در حال کاپایل است، قابل استفاده است): CTRL+Break

کامپیل و اجرا در حالت عادی: ترکیب CTRL+F5

کامپیل و اجرا در حالت Debug: ترکیب F5

  • انتخاب یک عنصر تنها با یک کلیک


برای انتخاب یک عنصر تنها کافی است کلید CTRL را پایین نگه داشته و بر روی آن کلیک کنید.

اگر کلید CTRL را همچنان پایین نگه دارید و توسط ماوس متن انتخابی را بکشید، در این صورت یک کپی از متن را می توانید در هر جایی قرار دهید.

 

وسوسه ای به نام مهاجرت

۱۳۸۷/۰۸/۱۸ ۰:۲۱ Salar Khalilzadeh https://plus.google.com/105397214522932500988 منتشر شده در تاریخ : ۱۳۸۷/۰۸/۱۸ دسته بندی : ، ، 9

نمی دونم تا حالا به مهاجرت فکر کردین یا نه، اما حداقل بیشتر آدمایی که من میشناسم به این مسئله فکر کردن. تو حرفه ای که من کار می کنم یعنی تولید نرم افزار، چند عامل هست که به نظرم باعث میشه افراد چنین فکر کنن.

اولین مسئله که به نظر من میرسه، دسترسی مستقیم به منابع دانش و امکان حضور درمیان سازندگان تکنولوژی هست. شاید به نظر بیاد که با وجود اینترنت دیگه نباید مشکلی باشه، ولی واقعیت چیز دیگری هست. اینکه در یک پروژه حضور داشته باشی و با استفاده از کار تیمی و با استفاده از بهترین ابزارها و مهم تر از همه با همکاری افراد نخبه که می تونی از تجربیات اونها در همه زمینه ای استفاده کنی مسئله ای هست که به ندرت تو ایران دیده میشه و در چند شرکت انگشت شمار. متاسفانه زیاد مشخص نیست که این شرکت های ایرانی از چه روشی استفاده می کنند و معلوم که استانداردی به شکل صحیح رعایت بشه یا نه.

در کنار این مورد، مسئله مالی هم خیلی مهم هست. با نگاهی به سایت HotJobs یاهو و شغل های برنامه نویسی می تونید رنج حقوق رو مشاهده کنید. معمولا کمترین حقوق از پایه ای 40,000 در سال هست و بسته به حرفه های مختلف این مورد افزاریش پیدا می کنه. برای مثال برنامه نویسان .NET در حدود 60,000 تا 80,000 دلار دریافت می کنند و مدیران شبکه در حدود 140,000 دلار و در نهایت مدیران و مدیران ارشد بالای 200,000 دلار.

این ارقام آدم رو خیلی وسوسه می کنه و در مقایسه مبالغ ناچیزی که در ایران دریافت می کنیم بسیار زیاد هستند.

اما این همه مسئله نیست، طبق بررسی انجام شده در سال 2007 شغل برنامه نویسی بهترین شغل در آمریکا و وکیلی پردرآمدترین شغل بوده است. انتخاب به عنوان بهترین شغل بدین جهت است که استرس های اضافی ندارد و دارای ریسک کمی می باشد. همچنین امکانات رفاهی مناسبی در اختیار آنها قرار می گیرد.

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

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

مسئله ما هم شده بحث جاذبه و دافعه. اینجا اونقدر نیرو های دافعه هست که اگه گیر و بند های فعلی وجود نداشت شاید چند سال پیش شخصا رفته بودم.

دافعه هایی مانند اهمیت ندادن به تکنولوژی های روز، نداشتن بودجه IT برای کشور، محدودیت دسترسی به اینترنت برای کاربران و گرانی بیش از حد آن. در کنار اینها موانع قانونی و دولتی فراوان برای حرکت به سمت IT. همچنین مشکلات مالی و نبود تضمین آینده مناسب برای ما. چرخش پول درمیان عدای اقلیت. که در نهایت ما رو هدف قرار داده و از لحاظ مالی و روحی ضعیف میکند.

شاید گیری که باعث کمتر مهاجر شدن افراد میشه مشکلات مالی باشه و البته تعلق داشت به این خاک، شاید گفتنش ساده باشه که من می خوام برم ولی برای خیلیها خیلی سخته.

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

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

 

وبلاگ شخصی لینوس توروالدز

۰:۲۰ Salar Khalilzadeh https://plus.google.com/105397214522932500988 دسته بندی : ، ، ، 1

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

به نظرم کمی دیر دست به نوشتن زده.

لینک وبلاگ ایشان

 

بروکراسی اداری و پروژه ما

۱۳۸۷/۰۸/۱۴ ۲:۳۲ Salar Khalilzadeh https://plus.google.com/105397214522932500988 منتشر شده در تاریخ : ۱۳۸۷/۰۸/۱۴ دسته بندی : ، ، 4

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

موضوعی که باعث شد تا این نوشته رو بنویسم، جلسه ای بود که امروز با چند نفر از مدیران یک سازمان داشتیم.

حریان از این قرار هست که ما برای انجام طرحی پیشنهادی خودمون که البته هیچ هزینه اضافی برای سازمان مربوطه نداشت و البته بسیار هم مفید بود، در این جلسه بودیم.
بگذریم از اینکه چند تا از مسئولان برای اینکه خودشون رو میان بقیه نشان بدن، گیرهای اضافی دادن و سنگ انداختند جلوی پامون.

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

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

دیگه حرفی برای گفتن ندارم