گوگل مهمترین موتور جستجوگر تا این زمان است.با یک سرچ کلیه مطالب مورد نیاز را در یک صفحه به ما نشان میدهد و بالا رفتن رتبه سایت ها در گوگل باعث موفقیت بهتر و بیشتر شغل ها و حرفه ها میشود.
منظور از نتایج جستجوی ارگانیک چیست
مطمئن هستیم اطلاعات خوبی در زمینه دانش بهینهسازی رتبه وبسایت که به اصلاح به آن سئو (SEO) گفته میشود در اختیار دارید، اما باز هم کار از محکمکاری عیب نمیکند و قبل از اینکه آستین بالا بزنید و برای ارتقا رتبه وبسایت خود دست به کار شوید بهتر است شما را با مفاهیم اولیهای در این زمینه آشنا کنیم. برای اینکار باید توضیح دهیم که منظور از نتایج جستجوی ارگانیک (Organic Search Results)، چیست؟
در دنیای سئو وقتی از نتایج جستجوی ارگانیک صحبت میکنیم منظور درواقع همان نتایجی است که پس از جستجوی یک واژه در قسمت پایین و زیر نتایجی که برای آنها پول پرداخت شده، نمایش داده میشود. بهعبارت سادهتر به دو شیوه میتوان به صدر رتبه در نتایج جستجوی گوگل رسید. شیوه اول، پرداخت هزینه به گوگل است که تبلیغات شما را بسته به هزینهای که به گوگل پرداخت کردهاید در زیر عبارتی که کاربر قصد جستجوی آن را دارد نمایش داده میشود.
به غیر از نتیجههای پولی، با نتایج غیرپولی طرف هستیم که مدیران وبسایت بدون پرداخت پولی به گوگل، با بهینهسازی و ارتقا رتبه وبسایت، خود را به رتبههای بالا در نتیجههای جستجوی گوگل میرسانند. برای رسیدن به رتبههای بالا در نتیجههای ارگانیک گوگل باید وبسایت شما به لحاظ فنی، بهترین پارامترهای لازم را از نگاه گوگل داشته باشد و محتوایی که تولید میکنید نیز باکیفیت باشد.
از طرف دیگر همانگونه که از نام نتیجههای پولی پیداست، رسیدن به این نتیجهها در گوگل راحت است و به هر اندازه که به گوگل پول پرداخت کنید، به همان اندازه در صدر رتبههای گوگل قرار میگیرید. نتیجههای پولی که در دنیای سئو به آنها کلیک به ازای پرداخت (Pay Per Click)، گفته میشود در بیشتر مواقع در بالای نتیجههای ارگانیک در موتور جستجوی گوگل نمایش داده میشوند. جالب اینجاست که تحقیقات ثابت کرده کاربران تمایل زیادی به کلیک روی نتیجههای پولی ندارند و نتایج ارگانیک را در موتورهای جستجو، نتیجههایی مربوطتر و باارزشتر میدانند.
اینجاست که نقش سئو در بهینهسازی وبسایت پررنگ میشود و به لطف این دانش میتوانیم رتبه وبسایت را در رتبههای بالاتر موتور جستجوی گوگل قرار دهیم. در این بین گوگل برای تشخیص کیفیت وبسایتها و محتوایی که در آنها تولید میشود از الگوریتمهای بسیار پیشرفتهای بهره میگیرد. تعداد زیادی کامپیوترهای بسیار قدرتمند با برنامههایی که به در دنیای کامپیوتر به آنها اصطلاحاً «بات» (Bot) گفته میشود، شبانهروز در حال گشت و گذار در وبسایتهای مختلف هستند و لینکهای مختلف صفحههای هر وبسایت را برای بررسیهای بیشتر و رتبهگذاری پیدا میکنند.
آدرس لینکهای وبسایت که آنها را با نام یو. آر. اِل (URL)، میشناسیم در موتور جستجوی گوگل فهرست یا به اصطلاح ایندکس (index) میشود و زمانی که کاربر یک واژه را در گوگل تایپ میکند، موتور جستجو نزدیکترین آدرس وبسایت را با توجه به اطلاعاتی که ایندکس کرده است به کاربر نمایش میدهد. همانگونه که اشاره شد این فرآیند با محاسبات ریاضی بسیار پیشرفته و الگوریتمهای تخصصی انجام میشود و گفته میشود گوگل از چیزی نزدیک به ۲۰۰ فاکتور مختلف برای رتبهدهی به سایتها کمک میگیرد.
نتایج جستجوی ارگانیک به دو دسته اصلی تقسیم میشود که این دستهها را با نامهای آنپیج (On Page) و آفپیج (Off Page) میشناسیم. منظور از آنپیج درواقع کد و محتوایی است که بوسیله آن صفحههای وب ساخته میشوند و منظور از آف پیچ نیز فاکتورهایی است از در بیرون از محیط وبسایت به ارتقا رتبه آن کمک میکنند.
از آنجایی که در بیشتر مواقع بهینهسازی آف پیج وبسایت به ساخت لینکهای بیرونی مربوط میشود، در ادامه این مطلب اشاره زیادی به بهینهسازی آف پیج نمیکنیم و تمرکز بیشتری به روشهای جدید و مهم در بهینهسازی آن پیج صفحههای وبسایت جهت ارتقا رتبه در گوگل خواهیم داشت.
گامهای اصلی برای ارتقا رتبه وبسایت
گام اول
از آنجایی که حیات وبسایت شما به معرفی آن به گوگل بستگی دارد، دسترسی راحت گوگل به صفحههای وبسایت شما اهمیت زیادی پیدا میکند. بهعبارت دیگر به هر اندازه که دسترسی راحتتری را برای گوگل جهت زیر و رو کردن صفحههای وبسایت خود فراهم کنید، به همان اندازه نیز احتمال افزایش رتبه وبسایت شما بیشتر خواهد شد. خوشبختانه انجام این کار از چیزی که بهنظر میرسد سادهتر است و یک فایل سایتمَپ (SiteMap File)، کار شما را راه خواهد انداخت. این فایل به لحاظ فنی با نام سایتمَپ ایکس. ام. ال (sitemap.xml)، شناخته میشود و تمامی صفحههای وبسایت و همچنین زمان آپدیتکردن آنها را باید به این فایل اضافه کنید.
برای راهنماییهای بیشتر پیشنهاد میکنیم سری به صفحه وبمسترهای گوگل (Webmasters webpage) بزنید. پس از اینکه تمامی این موارد را با دقت کامل انجام دادید باید به موتورهای جستجو زمان لازم را بدهید تا پس از پیدا کردن فایل سایتمپ، به قسمتهای مختلف وبسایت شما سر بزنند و با فهرست کردن این قسمتها، اطلاعات کافی را برای نمایش محتوای وبسایت شما بدست بیاورند.
گام دوم
حواستان به تنظیماتی که در فایل روبات تی. اکس. تی (robots.txt)، اعمال کردهاید باشد. این فایل جلوی ورود باتهای ناشناس و خطرناک را به وبسایت میگیرد و استفاده از آن فایدههای زیادی دارد، اما اگر به درستی تنظیم نشده باشد، اجازه ورود باتهای مفیدی که موتورهای جستجو روانه وبسایت شما کرده را نیز خواهد گرفت و پس از اینکه باتهای موتورهای جستجو به دلیل تنظیمات نادرست این فایل در ورود به سایت شما به در بسته خوردند، قادر به شناسایی محتوای وبسایت نخواهند بود و در نتیجه به هر اندازه هم که محتوای خوبی تولید کنید و وبسایت خود را به لحاظ اصول سئو بهروز نگه دارید، باز هم نباید امیدی به کسب رتبه در گوگل داشته باشید.
گام سوم
دقت فرآیند طراحی وبسایت را نباید دست کم گرفت و زمانی که یک وبسایت را توسعه میدهید احتمال ایجاد صفحههای تکراری وجود دارد. از طرف دیگر نرمافزارهای مدیریت وبسایت نیز گاهی اوقات صفحههای تکراری ایجاد میکنند و در صورت ایجاد صفحههای تکراری، باتهایی که موتور جستجوی گوگل به وبسایت شما ارسال کرده است قادر به تشخیص صفحهای که از آن چندبار تولید شده نخواهند بود و پیشنهاد میکنیم هر چند وقت یک بار، تمام صفحههای وبسایت را بررسی کرده و در صورت مشاهده صفحههای تکراری، حتماً این صفحهها را حذف نمایید.
گام چهارم
در حال حاضر سیستم مدیریت وبسایت وُردپرس (WordPress) بهعنوان یکی از محبوبترین سیستمهای مدیریت وبسایت بهحساب میآید و نزدیک به ۲۶ درصد از تمامی وبسایتهایی که در دنیا آنلاین هستند با وردپرس تولید شده اند. از طرف دیگر وردپرس دائم در حال گسترش است و مدیران وبسایت چیزی حدود ۴۱.۷ میلیون پست جدید در هر روز در وبسایتهای وردپرسی خود قرار میدهند و نزدیک به ۶۰.۵ میلیون کامنت در هر ماه در وبسایتهای وردپرسی ثبت میشود.
با این حساب احتمال زیادی وجود دارد وبسایتی که از آن استفاده میکنید با وردپرس توسعه داده شده باشد. به این ترتیب پیشنهاد میکنیم اگر وبسایت وردپرسی دارید، حتماً از آن نسخه استاتیک (Statics)، تولید و ذخیره نمایید. انصافاً باید اعتراف کرد گوگل تعامل خوبی با وبسایتهای داینامیک (Dynamic) دارد، اما به قول قدیمیها کار از محکمکاری عیب نمیکند و از آنجایی که تهیه نسخه استاتیک از وبسایتی که با وردپرس توسعه داده شده است کار بسیار ساده و راحتی است پیشنهاد میکنیم حرف ما را زمین نیاندازید و حتماً از وبسایت خود نسخه استاتیک تهیه نمایید.
به شما اطمینان خاطر میدهیم اطلاعاتی که در نسخه استاتیک وبسایت وجود دارد کمک زیادی به گوگل برای تشخیص محتوای شما خواهد کرد.
گام پنجم
همانگونه که در ابتدا اشاره کردیم باتهای گوگل، صفحههای وبسایت را با آدرسهای یو. آر. اِل آنها پیدا میکنند و به همین دلیل نیز توصیه میشود تا جایی که امکان دارد، آدرسهای واضح و مشخصی را برای صفحههای وبسایت انتخاب نمایید. بیشتر سیستمهای مدریت محتوا، صفحههایی که در وبسایت تولید میشود را به صورت خودکار نامگذاری میکنند و به همین دلیل این صفحه در بیشتر مواقع به جای اینکه نام درست و درمان و قابل درکی داشته باشند، عملاً شمارهگذاری شدهاند.
به این ترتیب پیشنهاد میکنیم به جای استفاده از نامهای پیشفرض برای آدرس لینک صفحههای وبسایت از نامهای واضح و معنیدار کمک بگیرید. برای نمونه به جای آدرس صفحه وبسایتی که با شمارهای مانند ?page=۴۲۱۳۲ نامگذاری شده است از نامی مانند /products/fridges/dynatech-coolfreezepro/ استفاده کنید. این نام موتورهای جستجو را قانع میکند که با صفحهای مربوط به محصولات یک شرکت سر و کار دارد و بدون شک چنین روشی در ارتقا رتبه وبسایت تأثیرگذار خواهد بود.
گام ششم
در بالا و در قسمت بهینهسازی آف پیج برای شما از اهمیت لینکدهی بیرونی گفتیم، اما نباید از لینکدهی داخلی غافل شوید و اطمینان خاطر حاصل نمایید که ساختار منطقی و قابل درکی را برای لینکدهی محتوای داخل وبسایت پیشرو گرفتهاید. پیشنهاد میکنیم صفحههایی که در آنها محتوای مهمی دارید را به صفحه اصلی وبسایت لینک بدهید. دستهبندی محتوا و لینکدادن گروهی آنها به یکدیگر باعث میشود تا سایت شما مسیریابی خوبی داشته باشد و کاربر به راحتی به محتوای مورد نظر دست پیدا کند، در نتیجه موتورهای جستجو نیز درک بهتری از لینکدهی محتوای داخل وبسایت پیدا میکنند و بدون شک رتبه چنین وبسایتی در موتورهای جستجو یک سر و گردن بالاتر از وبسایتهای رقیب قرار خواهد گرفت.
گام هفتم
قانون نانوشتهای در بهینهسازی وبسایت وجود دارد که بر اساس آن باید محتوا را به گونهای بنویسید که نه تنها کاربر بتواند این محتوا را به بهترین شکل ممکن مطالعه کند، بلکه این محتوا برای گوگل نیز قابل درک باشد. بهعبارت سادهتر محتوای شما باید به مذاق گوگل نیز خوش بیاید تا آن را در رتبههای بالاتر ببرد. به این ترتیب اطمینان خاطر حاصل کنید واژههایی در وبسایت شما مورد استفاده قرار میگیرند که کاربران همان واژهها را در گوگل، تایپ و جستجو میکنند.
با این حساب بهتر است محتوایی که تولید میکنید برای خواندن روباتها و کامپیوترهای گوگل نیز آماده شده باشد. از طرف دیگر گوگل تخصص بهتری در رتبهگذاری صفحههای وبسایتهایی دارد که در این صفحهها شاهد مطالب متنی بیشتری به جای ویدئو و عکس باشیم. بهعبارت دیگر میتوان گفت روباتهای گوگل تنها متنهایی که در صفحهوب سایت نوشتهاید را بررسی میکنند و در بررسی مطالبی که در فریمها (Frames)، ویدئوها و عکسها قرار گرفتهاند ناتوان هستند.
گام هشتم
مخاطب را هرگز نادیده نگرید و به همان اندازه که در نگارش محتوا برای موتورهای جستجو وسواس به خرج میدهید، به همان اندازه نیز نگران مخاطب باشید و محتوای باکیفیت و قابل درکی برای مخاطب تولید کنید. از آنجایی که در گوگل با کلید واژهها سر و کار داریم و کاربران نیز وبسایت شما را با کلیدواژهها پیدا میکنند باید دقیقاً همان کلیدواژههایی را در محتوای خود به کار بگیرید که کاربران آن کلیدواژهها را در قسمت جستجوی گوگل تایپ میکنند.
این کلیدواژهها باید در محتوایی که تولید کردهاید، چندین بار تکرار شود، اما توجه داشته باشید در استفاده از کلیدواژه زیادهروی نکنید چرا که نتیجه برعکس دارد و گوگل اصلاً از وبسایتهایی که محتوای آنها کلیدواژهای بیشماری دارد خوشش نمیآید.
گام نهم
پس از اینکه تمامی مواردی که در گامهای بالا به آنها اشاره کردیم را با دقت انجام دادید نوبت آن فرا میرسد تا لینکهای خوب و قابل اعتمادی برای افزایش میزان اعتبار یا بهاصطلاح اتوریتی (authority) وبسایت خود آماده کنید. گرفتن لینک از وبسایتهایی که اتوریتی بالایی دارند تأثیر زیادی در رتبه وبسایت دارد و به هر اندازه که انتخاب لینکها با اتوریتی بالا دقت بهخرج بدهید به همان اندازه نیز احتمال افزایش رتبه وبسایت شما وجود دارد.
چه زمانی باید از یک متخصص سئو کمک بگیریم
گامهایی که در بالا برای افزایش رتبه وبسایت به آنها اشاره کردیم ممکن است در نگاه اول ساده بهنظر برسد، اما اهمیت زیادی دارد و انجام آنها نیز ممکن است برای شما دشوار باشد. از طرف دیگر حتی اگر دانش خوبی در زمینه کامپیوتر و سئو داشته باشید، باز هم ممکن است به اندازهای در کار و حرفهای که به آن مشغول هستید دچار گرفتاری باشید که وقتی برای رسیدگی به سئو و بهینهسازی وبسایت پیدا نشود. با این حساب پیشنهاد میکنیم اگر به هر دلیلی نمیتوانید دستی به سر وضعیت بهینهسازی وبسایت خود بکشید، حتماً از یک کارشناس مختصص کمک بگیرید.
خوشخبتانه این روزها نهتنها متخصصین کاربلدی برای افزایش رتبه وبسایت را میتوان پیدا کرد، بلکه موسسههای نیز وجود دارند که تخصص آنها بهینهسازی وبسایت است و برای اینکار میتوانید روی آنها حساب باز کنید. لازم به ذکر است دنیای دیجیتال نیز همانند دنیای معمولی دارای افراد متخصص و انسانهای ناوارد است. به همین دلیل شاهرگ تجارت دیجیتال خود را به دست افرادی که دانش و توانایی آنها به شما اثبات نشده است نسپارید و سعی کنید سراغ موسسهها و افرادی بروید که کارنامه پر و پیمانی در زمینه بهینهسازی وبسایت داشته باشند و تاکنون وبسایتهای معتبری را ارتقا رتبه دادهاند.
این کارشناسان، طرح توجیهی کاملی را از برنامههایی که برای بهینهسازی وبسایت وجود دارد با شما در میان خواهند گذاشت و به احتمال زیاد در کنار بهینهسازی وبسایت، سرویسهای دیگری مانند بازاریابی ایمیلی و حضور در شبکهای اجتماعی را نیز به شما پیشنهاد خواهند کرد.
به این نکته نیز اشاره کنیم که شوربختانه در دنیای سئو شاهد کلاهبرداریهای زیادی نیز هستیم و در کنار سئو رایج و استاندارد که به آن سئو کلاهسفید (White Hat SEO)، گفته میشود، شاهد کلاهبردارانی هستیم که آنها را با نام سئو کلاهسیاه (Black Hat SEO)، میشناسیم و چنین افراد نابکاری در ابتدا باغ سبز و سرخ نشان میدهند و مدعی میشوند که در عرض مدت کمی، وبسایت شما را به صدر رتبههای گوگل خواهند رساند.
اما همانگونه که شما بهتر از ما میدانید تجربه نشان داده است که بار کج به منزل نمیرسد و سئو کلاهسیاه هرگز ثباتی ندارد و بهتر است با به کارگرفتن گامهایی که به آن اشاره کردیم، سلانهسلانه مسیر وبسایت خود را به سمت رتبههای بالاتر گوگل ادامه دهید.
در پایان باید گفت راههای رسیدن به رتبههای بالای گوگل از چیزی که فکرش را بکنید بیشتر است و اگر شما هم تجربه سودمندی در این زمینه دارید، خواهشمندیم در قسمت نظرات ما و سایر کاربران را از این تجربههای مفید باخبر سازید.
به تازگی گوگل قابلیت به اشتراک گذاری مکان فعلی را برای کاربران اپلیکیشن گوگل مپس ارائه کرده است. استفاده از این قابلیت برای کاربران سیستم عامل های اندروید و iOSS وجود دارد.
بالاخره گوگل امکان به اشتراک گذاری موقعیت فعلی کاربر بر روی گوگل مپس در اختیار کاربران این اپلیکیشن کاربردی قرار داد. از امروز قابلیت جدیدی بر روی گوگل مپس به کاربران نسخه اندرویدی و iOS این اپلیکیشن در سراسر دنیا ارائه شده است که با استفاده از آن می توانند موقعیت فعلی و واقعی خود را دوستان و سایر کاربران به اشتراک بگذارند.
از این پس کاربران می توانند در پاسخ به سؤال “کجایی” و یا ” چه زمانی می رسی؟” موقعیت واقعی و فعلی خود را برای مخاطب ارسال کنند. افراد و کاربران مخاطب می توانند این اطلاعات به اشتراک گذاری شده را بر روی دستگاه های مجهز به سیستم عامل های اندروید، iOS، ویندوز و غیره مشاهده نمایند. حتی امکان دریافت این اطلاعات بر روی کامپسیوترهای رو میزی و یا لپ تاپ ها نیز وجود دارد.
روش به اشتراک گذاری اطلاعات در خصوص موقعیت فعلی کاربر بسیار ساده است. ابتدای بر روی بر گه جدید Share Location رفته و سپس کاربر مخاطبی را که می خواهید اطلاعات موقعیت مکانی خود را با او به اشتراک بگذارید انتخاب نمایید. به همین راحتی کاربر مخاطب می تواند اطلاعات مکانی شما را دریافت نماید. از طرفی نه تنها می توان این اطلاعات را با مخاطبینی که در لیست مخاطبین گوگل کاربر وجود دارند به اشتراک گذاشت بلکه می توان لینک مربوط به اطلاعات موقعیت مکانی را بر روی پیام رسان های مختلف ارسال نمود تا کاربر مخاطب این اطلاعات را بر روی پیام رسان مورد علاقه خود دریافت نماید.
بعد از ب اشتراک گذاری موقعیت مکانی کاربر می تواند پیامی مبنی بر ارسال اطلاعات موقعیت مکانی را به صورت یک آیکون در پایین صفحه نمایش دستگاه خود مشاهده کند. مسلماً امکان غیر فعال کردن قابلیت و حالت به اشتراک گذاری موقعیت فعلی و واقعی کاربر در هر زمان وجود دارد.
علاوه بر این امکان به اشتراک گذاری مقصد بعدی با استفاده از دکمه More که بر روی صفحه navigation قرار دارد برای کاربران ارائه شده است. در این حالت کاربران و مخاطبینی که اطلاعات مکانی با آن ها به اشتراک گذاری می شود قادر خواهند بود که در خصوص تمامی مسیرها و مقصدهای بعدی شما اطلاعاتی داشته باشند و در صورت تمایل با شما همراهی نمایند.
البته ممکن است در حال حاضر تمام کاربرانی که از اپلیکیشن گوگل مپس استفاده می کنند قادر به استفاده از این قابلیت جدید که همین امروز در اختیار کاربران قرار داده شده است نباشند اما به زودی تمام کاربر در هر جای دنیا قادر خواهند بود تا به قابلیت به اشتراک گذاری مکان فعلی و واقعی از طریق دستگاه های مجهز به سیستم عامل اندروید و یا iOS دسترسی داشته باشند.
ابتدا نرمافزار Xampp را مثل همیشه باز کرده و سرورهای Apache و MySQL را در حالت اجرا قرار دهید. حال در پوشه cms که جلسات قبل آن را ایجاد کردهاید، باز کنید.
در این پوشه یک فایل جدید به نام index.php بسازید. این صفحه قرار است به منظور نمایش اطلاعات مورد استفاده قرار گیرد. در این صفحه ما با استفاده از دستورات پیاچپی و مای اسکیوال، اطلاعات مربوط به پستهای ثبت شده در جدول posts که در بانک اطلاعاتی cms ساخته بودیم را میخوانیم و آنها را در مرورگر به نمایش درمیآوریم. کد زیر را در فایل index.php قرار دهید تا در ادامه آن را بررسی کنیم و کار هر خط از این کد را برایتان توضیح دهیم.
<!DOCTYPE html> <html dir="rtl" lang="fa-IR"> <head> <title>صفحه اصلی</title> <meta charset="utf-8" /> </head> <body style="font-family: tahoma; font-size:14px;"> <center> <?php include ("config.php"); //select all records from posts table $get_query = mysql_query("SELECT * FROM `posts`"); //now using while for get each record sepratly and show it to web browser while ($fetch_result = mysql_fetch_array($get_query)) { $postTitle = $fetch_result['title']; $postText = $fetch_result['text']; echo "<h2>$postTitle</h2>"; echo "<p>$postText</p><hr>"; } ?> </center> </body> </html>
همانطور که در کد بالا میبیند ابتدا با دستور inlcude فایل اتصال به بانک اطلاتی و انتخاب جدول cms که config.php نام دارد را در این فایل فراخوانی میکنیم. حالا میتوانیم به جدول مورد نظر که در اینجا posts است کوئری زده و عملیات مورد نظرمان را انجام دهیم. با دستور SELECT جدول و فیلدهای مورد نظر را انتخاب میکنیم و آن را در یک آرایه به نام posts_query ذخیره میکنیم.
کوئری مورد نظر برای انتخاب دادهها به این صورت است که ابتدا کلمه SELECT را نوشته و سپس نام فیلدهایی که قصد خواندن آنها را داریم وارد میکنیم و آنها را با کاما انگلیسی از یکدیگر جدا میسازیم. البته اگر بخواهیم تمام فیلدها را با هم بخوانیم کافی است از کاراکتر ستاره (*) یعنی همانطور که ما در کد بالا نوشتهایم استفاده کنیم. سپس کلمه کلیدی FROM و بعد از آن نام جدولی که قصد خواندن اطلاعاتش را داریم مینویسیم.
حال با استفاده از حلقه while تا زمانی که در جدول post رکورد وجود دارد پستها را گرفته و نمایش میدهیم. در شرط حلقه خروجی تابع mysql_fetch_array را در یک آرایه دیگر به نام fetch_results ذخیره میکنیم. به طور همزمان این شرط باعث میشود تا حلقه به تعداد رکوردهایی (مطالبی) که در جدول posts وجود دارد تکرار شود. در هر بار تکرار شدن این حلقه اطلاعات فیلدهای مختلف هر رکورد در آرایه fetch_results ذخیره میشود. برای دسترسی به اطلاعات هر فیلد از هر رکورد باید نام آن فیلد را در کروشه جلوی آرایه fetch_results بنویسیم. همانطور که در کد بالا میبینید ما فیلدهای title و text را فراخوانی کردهایم.
اگر این کد برای شما مبهم است اصلا جای نگرانی نیست چراکه اکثر برنامه نویسان پیاچپی برای فراخوانی چند رکورد از بانکهای اطلاعاتی mysql از همین روش یا روشهای مشابه دیگر بهره میبرند. در ادامه آموزشها با روشهای دیگر نیز آشنا خواهید شد. نکته بسیار مهمی که باید بدانید این است که باید عملیات فراخوانی اطلاعات از جداول بانکهای اطلاعاتی را تا جایی که دستتان برای این کار روان شود تمرین و تکرار کنید.
حالا آدرس http://127.0.0.1/cms/index.php را در مرورگر اجرا کنید. اگر خاطرتان باشد نوع یونیکد فیلدهای جداول بانک اطلاعاتی را از نوع utf-8 تعیین کردیم تا بتوانیم متون فارسی را در جدول posts ذخیره کنیم. حال اگر پروژه را با آدرسی که گفتیم اجرا کنید با صفحهای مانند زیر مواجه خواهید شد و کاراکترها همگی به صورت علامت سوال نمایش مییابند.
اما باز هم جای نگرانی نیست. این مشکل به دلیل نوع اتصال به بانک اطلاعاتی رخ داده و برای رفع آن باید فایل config.php را کمی ویرایش کنید. در واقع باید نوع اتصال را هم utf-8 تعیین کنیم که این کار بسیار آسان است. فایل config.php را باز کنید و آن را به صورت زیر تغییر دهید. در واقع کد زیر را جایگزین کد کنونی کنید.
<?php $dbhost = "localhost"; $dbuser = "root"; $dbname = "cms"; $dbpass = ""; $connect_db = mysql_connect ($dbhost, $dbuser, $dbpass); mysql_set_charset('utf8',$connect_db); mysql_select_db($dbname,$connect_db); ?>
همانطور که میبینید در خط ۷ کد بالا از تابع mysql_set_charset استفاده کردهایم. پس از اتصال به بانک داده و پیش از انتخاب جدول مورد نظر، باید این کد را استفاده کنید. این تابع دو آرگومان ورودی دارد که ورودی اول نوع یونیکد مورد نظر برای اتصال به سرور MySQL و ورودی دوم لینک تابع اتصال به بانک داده خواهد بود که در اینجا connect_db است.
حالا اگر مجددا به صفحه http://127.0.0.1/cms/index.php مراجعه کنید مشکل رفع شده و متون فارسی به درستی نمایش یافتهاند. اگر خاطرتان باشد گفتیم که استفاده از include باعث میشود در صورت نیاز به انجام تغییرات، با تغییر یک فایل میتوان این تغییرات را در تمامی فایلها اعمال کرد.
اگر همه چیز را به درستی انجام داده باشید نتیجه کار باید شبیه به عکس بالا باشد و متون فارسی به درستی نمایش یابند.
اگر دقت کرده باشید در اکثر سایتهای محتوایی، هر مطلب یک لینک ثابت دارد که معمولا با کلیک روی عنوان آن به صفحه مخصوص مطلب منتقل میشوید. برای اینکه یک صفحه منحصر به فرد برای هر مطلب ایجاد کنیم باید از مشخصهای در هر پست بهره ببریم که یکتا باشد. هنگام طراحی جدول posts فیلد id را به نحوی تعیین کردیم که با ایجاد هر رکورد در جدول یک واحد افزایش یابد. پس میتوان با استفاده از همین id برای هر پست یک صفحه اختصاصی ایجاد کرد.
اگر بهیاد داشته باشید گفتیم از روش GET که در ثبت فرمها آن را توضیح دادیم میتوان استفادههای مناسبی در پیاچدی کرد. یکی از بهترین استفادهها ایجاد صفحه اختصاصی برای هر پست است. کافی است بعد از خط ۲۰ یعنی:
$postText = $fetch_result['text'];
یک خط جدید اضافه کنید. خط زیر را پس از خط ۲۰ اضافه کنید تا آیدی هر پست را با هربار اجرای حلقه مانند عنوان و متن پستها دریافت کنیم و آن را در یک متغیر به نام postId ذخیره کنیم.
$postId = $fetch_result['id'];
حالا کد:
echo "<h2>$postTitle</h2>";
را به:
echo "<h2><a href=single.php?id=$postId>$postTitle</a></h2>";
تغییر دهید. به این طریق یک لینک منحصر به فرد برای هر مطلب ایجاد کردهایم. به عنوان مثال اگر روی مطلب اول کلیک کنیم به لینک http://127.0.0.1/cms/singe.php?id=1 منتقل خواهیم شد. حالا براحتی میتوان با دستورات پیاچپی اطلاعات پستی که آیدی آن 1 است را نشان دهیم.
ابتدا یک فایل جدید در پوشه cms ایجاد کرده و نام آن را single.php بگذارید. در این فایل کدهای زیر را قرار دهید:
<!DOCTYPE html>
<html dir="rtl" lang="fa-IR">
<head>
<title>مشاهده پست</title>
<meta charset="utf-8" />
</head>
<body style="font-family: tahoma; font-size:14px;">
<center>
<?php
include ("config.php");
$pid = $_GET['id'];
//select all records from posts table
$get_query = mysql_query("SELECT * FROM `posts` WHERE `id` = '$pid' ");
$fetch_result = mysql_fetch_array($get_query);
$postTitle = $fetch_result['title'];
$postText = $fetch_result['text'];
echo "<h2>$postTitle</h2>";
echo "<p>$postText</p><hr>";
?>
</center>
</body>
</html>
این کد نیز شبیه به کد index.php است با این تفاوت که این بار در کوئری انتخاب داده از بانک اطلاعاتی تغییراتی وجود دارد و نیز دیگر نیازی به استفاده از حلقه نداریم زیرا در اینجا فقط قصد داریم یک رکورد را از جدول posts بخوانیم.
مثل همیشه ابتدا config.php را با دستور include فراخوانی کرده و سپس با دستور GET_$ همانطور که در جلسه آموزش فرمها گفتیم، شناسه پست مورد نظر را در متغیری به نام pid ذخیره میکنیم.
حال باید کوئری را با یک شرکت به کار ببریم. مانند کوئری فایل index,php دستور اولیه را نوشته و در ادامه آن کلمه کلیدی WHERE را مینویسیم. این کلمه به بانک اطلاعاتی میگوید که ما دقیقا دنبال چه رکورد یا رکوردهایی هستیم. در اینجا ما به دنبال رکوردی هستیم که فیلد id آن برابر با یک است پس فیلدی که باید بررسی شود id است. حال نام فیلد را هم نوشته و پس از علامت = نام متغیری که شناسه آیدی پست مورد نظر را در خود دارد مینویسیم. به طور خلاصه میتوان گفت این کوئری در جدول posts به دنبال فیلدی میگردد که شناسه id آن برابر با عدد ۱ است.
همان شرطی که در فایل index در حلقه به کار بردیم را اینبار بدون حلقه مورد استفاده قرار میدهیم و همانند فایل index از طریق آرایهها به مقادر فیلدهای پست مورد نظر دسترسی مییابیم.
حال سیستم مدیریت محتوای ما کاملتر شده و میتوان با آن مطلب ارسال کرد، پستها را مشاهده کرد و نیز با کلیک روی عنوان هر پست به صفحه اختصاصی آن پست منتقل شد.
فایل index.php نهایی به شکل زیر خواهید بود-
همچنین فایل single.php پس از کلیک روی عنوان اولین مطلب به شکل زیر است:
امیدواریم از این جلسه نیز نهایت استفاده را برده باشید. برای تمرین سعی کنید برای جدول posts فیلدهای بیشتری تعریف کنید. مثلا یک فیلد برای خلاصه متن مطلب هم ایجاد کنید و با توجه به آنچه تاکنون یاد گرفتهاید هنگام درج مطلب به کاربر اجازه دهید تا سه فیلد را برای هر مطلب پر کند. سپس در صفحه index خود خلاصه و عنوان پست را نمایش دهید و در صفحه اختصاصی هر پست در فایل singe.php متن کامل مطلب را به نمایش بگذارید.
در این جلسه از آموزش میخواهیم به نکات کلیدی در جاوا بپردازیم و از هرکدام از آنها مثالهایی را با هم کار کنیم. در ابتدا با متغیرهای سراسری و محلی آشنا میشویم. بعد با عملگر ? آشنا میشویم که به کد نویسی کمتر کمک میکند. همچنین یاد میگیریم که چگونه برای ساختارهای تکرار خود Labelهایی را در نظر بگیریم و از آنها در برنامه استفاده کنیم. همچنین با کلمههای کلیدی continue و break آشنا میشویم و در آخر هم بازی ریختن تاس را با استفاده از متد ()random شبیه سازی میکنیم.
همانطور که در آموزشهای قبلی دیدیم، میتوانیم متغیرهایی را در قسمتهای مختلف برنامهی خود تعریف کنیم. اما این متغیرهایی که تعریف میکنیم، فقط در قسمتهای خاصی از برنامه قابل دستیابی و استفاده هستند. به آن محدودهای که یک متغیر در آن قابل دستیابی است و ما میتوانیم به آن متغیر دسترسی پیدا کنیم و از دادهی ذخیره شده در آن استفاده کنیم یا دادهی آن را تغییر دهیم، محدودهی قابل مشاهده و یا Scope آن متغیر گفته میشود. نحوهی تعریف کردن متغیرها به دو صورت است. یا آنها را به صورت سراسری (Global) تعریف میکنیم یا به صورت محلی (Local).
نکتهی مهمی که قبلا هم به آن اشاره شد این است که هر کلاس و متد دارای یک بدنه است که با استفاده از علامتهای آکولاد باز } و آکولاد بسته { مشخص میشود. این آکولادهای باز و بسته محدودهای را برای یک متد و یا یک کلاس مشخص میکنند که به آن بلوک (بلاک) آن متد یا کلاس گفته میشود. شاید سوالی برای شما پیش بیاید که منظور از محدوده چیست؟ فرض کنید مثلا ما یک متغیر از نوع عدد صحیح در بلاک یک متد تعریف کردهایم. بنابراین آن متغیر فقط در همان بلاک متد قابل استفاده است و قبل و بعد از آن متد به هیچ وجه قابل استفاده نیست. به مثال زیر توجه کنید:
public class MainClass { // main method public static void main(String[] args) { } // first method static void first() { int number = 0; System.out.println(number); } // second method static void second() { System.out.println(number); } }
همانطور که در کد بالا مشاهده میکنید در داخل بلوک کلاس MainClass سه متد وجود دارد. اولین متد، متد ()main که متد اصلی برنامه است. دومین متد، متدی است با نام first و سومین متد، متدی است با نام second. (در اینجا ما کاری به متد اصلی نداریم).
ابتدا در بلوک متد first متغیری از نوع عدد صحیح با نام number تعریف کردهایم و سپس در خط بعد مقدار آن را در خروجی استاندارد نمایش دادهایم. اما ما خواستیم مقدار متغیر number را نیز از طریق متد second هم نمایش دهیم. اما اگر این برنامه را در یک IDE بنویسید، زیر متغیر number در متد second خطی قرمز میکشد و برنامه اجرا نمیشود. برنامه با خطای کامپایل مواجه شده است. علت چیست؟ علت این است که متغیر number به صورت لوکال (Local) یا محلی تعریف شده است. بنابراین پس از اجرای بلوک مربوط به متد first، متغیر number توسط JVM به صورت اتوماتیک از حافظه پاک میشود و دیگر همچین متغیری وجود ندارد که ما بخواهیم از آن استفاده کنیم. برای همین هم است که در متد second از number ایراد میگیرد. زیرا number یک چیز تعریف نشده است و جاوا آن را نمیشناسد.
نکتهی دیگری که باید به آن توجه کنید این است که ما وقتی یک متغیر را تعریف میکنیم، آن متغیر از آن خطی که تعریف شده به بعد قابل دسترسی است. به کد زیر توجه کنید:
public class MainClass { // main method public static void main(String[] args) { } // third method static void third() { System.out.println(number); } // first method static void first() { int number = 0; System.out.println(number); } // second method static void second() { System.out.println(number); } }
ما در ادامهی کد قبلی، متدی با نام third را قبل از متد first تعریف کردهایم و باز خواستهایم از متغیر number استفاده کنیم. اما باز هم با ارور مواجه میشویم.
توجه داشته باشید اگر در داخل یک بلاک، بلاکی دیگر تعریف کنیم، در داخل بلاک دوم (زیر بلاک) میتوانیم به متغیرهای بلاک اول دسترسی داشته باشیم. به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { for (int i = 0; i < 10; i++) { int k = 0; for (int j = 0; j < 10; j++) { System.out.println(k); } } } }
در کد بالا ما یک حلقهی for ایجاد کردهایم که در داخل بلاک حلقهی اولی (حلقهی خارجی) یک متغیر با نام k تعریف کردهایم. و سپس یک حلقهی for دیگر داخل حلقهی اول تعریف کردهایم (حلقههای تو در تو) و در داخل بلاک حلقهی دوم از متغیری استفاده کردهایم که در بلوک حلقهی اول تعریف شده است (متغیر k). ما از برنامه هیچ اروری دریافت نمیکنیم و برنامه کامپایل و اجرا میشود. اما متغیر j در داخل بدنهی حلقهی اولی قابل استفاده نیست.
حالت دومی که ما میتوانیم یک متغیر را تعریف کنیم، به صورت سراسری، عمومی و یا Global است که در محدودهی یک کلاس تعریف میشود. به کد زیر توجه کنید:
public class MainClass { int number = 0; // main method public static void main(String[] args) { } // third method void third() { System.out.println(number); } // first method void first() { int number = 0; System.out.println(number); } // second method void second() { System.out.println(number); } }
کد قبلی را کمی تغییر دادهایم. اینبار متغیر number را در محدودهی کلاس تعریف کردهایم. یعنی متغیر number به صورت عمومی، سراسری و یا Global تعریف شده است. (متغیر number قبل از متد ()main تعریف شده است). بنابراین ما میتوانیم آن را در داخل محدودهی کلاس خود استفاده کنیم. در واقع متدهای main, first, second, third در داخل بلاک کلاس قرار دارند و میتوانند از متغیرهایی که در داخل کلاس تعریف میشوند استفاده کنند.
در آموزشهای قبلی ما با ساختار شرطی if...else آشنا شدیم و مثالهایی را کار کردیم. به عنوان مثال یک شرط را بررسی میکردیم و اگر آن شرط برقرار بود مقدار متغیری از نوع boolean را true و اگر شرط برقرار نبود مقدار متغیر را false در نظر میگرفتیم. در جاوا روش دیگری وجود دارد که ما بجای استفاده از ساختار if...else، از عملگر ? استفاده و یک شرط را بررسی میکنیم. شکل کلی استفاده از این عملگر به صورت زیر است:
variable = condition?expresion1:expresion2
کد بالا به این صورت است که اگر حاصل ارزیابی شرط (condition) مقدار true داشته باشد، expresion1 اجرا میشود، در غیر این صورت expresion2 اجرا میشود و نتیجه به variable نسبت داده میشود. به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { int num = 10; boolean b = false; b = num <= 10 ? true : false; System.out.println(b); } }
در کد بالا ما ابتدا یک متغیر از نوع عدد صحیح تعریف کردهایم. و همچنین یک متغیر دیگر از نوع boolean که مقدار پیش فرض آن false است. حالا میخواهیم متغیر b را مقدار دهی کنیم. به این صورت است که ابتدا متغیر b را مینویسیم و سپس یک علامت مساوی (انتساب) قرار میدهیم. بعد میآییم یک شرطی را بررسی میکنیم. شرط این است که اگر مقدار متغیر num کوچکتر و یا مساوی 10 باشد، مقدار بعد از عملگر ? به متغیر b نسبت داده شود. در غیر این صورت مقدار بعد از دو نقطه (:) به متغیر b نسبت داده شود. در بالا با توجه به اینکه مقدار متغیر num برابر با 10 است، بنابراین شرط ما برقرار است و مقدار true به متغیر b نسبت داده میشود. دو نقطه (:) نقش else در ساختار if...else را دارد.
در جاوا امکانی وجود دارد که ما میتوانیم برای حلقههای خود یک برچسب (Label) یا اصطلاحا نامی را در نظر بگیریم. به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { outer: for (int i = 0; i < 10; i++) { inner: for (int j = 0; j < 10; j++) { } } } }
من ابتدا یک حلقهی for ایجاد کردهام و سپس در داخل حلقهی for، یک حلقهی for دیگری ایجاد کردهام. همانطور که قبلا هم اشاره کردیم به این مدل حلقهها، حلقههای تو در تو (Nested Loops) گفته میشود. همانطور که مشاهده میکنید من برای حلقهی خارجی نام outer و برای حلقهی داخلی نام inner را در نظر گرفتهام. (برای نوشتن برچسب فقط کافی است قبل از ایجاد حلقه یک نامی را نوشته و سپس دو نقطه قرار دهیم و بعد حلقهی خود را بنویسیم). توجه داشته باشید که نوشتن برچسب برای حلقهها، برای خوانایی برنامه نیست. یعنی برای این نیست که ما (برنامه نویس) راحتتر تشخیص دهیم که کدام حلقه داخلی و کدام یک خارجی است (البته میتوان برای این هم استفاده کرد). اما در اصل کاربرد دیگری دارد که در ادامه به آن اشاره میکنیم.
در این آموزش ما با ساختار switch آشنا شدیم و کاربرد کلمهی کلیدی break را نیز فهمیدیم. نوشتن break باعث میشد که برنامه از ساختار switch خارج شود و دیگر ادامهی آن را اجرا نکند. اما break فقط برای ساختار switch نیست و در جاهای دیگر برنامه هم استفاده میشود. به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { int counter = 0; while(counter <= 10) { System.out.println("Num[" + counter + "]: " + counter); counter++; if (counter == 5) { System.out.println("Break"); break; } } } }
برنامهی بالا به این صورت است که حلقهی while تا زمانی که متغیر counter برابر با 10 نشده است ادامه پیدا میکند و مقادیر متغیر counter را چاپ میکند. اما در داخل بلوک while یک شرطی قرار داده شده است و آن این است که اگر مقدار counter برابر با 5 شد، ابتدا پیغام break را چاپ کند و سپس از حلقه خارج شود. اگر برنامهی فوق را به همین شکلی که در بالا نوشته شده است اجرا کنید، خروجی برنامه تا عدد 4 بیشتر نیست و در آخر هم عبارت Break چاپ میشود. خروجی برنامه را در زیر مشاهه میکنید:
Num[0]: 0 Num[1]: 1 Num[2]: 2 Num[3]: 3 Num[4]: 4 Break
اما اگر تغییراتی در ساختار if ایجاد کنیم، مثلا متغیر counter را برابر با عدد 15 بجای 5 قرار دهیم، دیگر break اجرا نمیشود و در خروجی برنامه اعداد یک تا 10 چاپ میشود و عبارت Break هم چاپ نمیشود. توجه داشته باشید که بعد از دستور break اگر چیز دیگری بنویسید با خطای کامپایل مواجه میشوید و برنامه کامپایل نمیشود. در ادامه میخواهیم برنامهای بنویسیم که کاربرد continue را آموزش دهیم.
continue به معنی ادامه دادن است و کاربرد آن در جاوا هم دقیقا به همین مفهوم است. به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { for (int i = 0; i <= 10; i++) { System.out.println("NUM[" + i + "]: " + i); } } }
این کد دقیقا کدی است که در قسمت قبل از آن استفاده کردیم. (البته اینبار از ساختار for استفاده کردهایم). در زیر خروجی برنامه را مشاهده کنید:
NUM[0]: 0 NUM[1]: 1 NUM[2]: 2 NUM[3]: 3 NUM[4]: 4 NUM[5]: 5 NUM[6]: 6 NUM[7]: 7 NUM[8]: 8 NUM[9]: 9 NUM[10]: 10
همانطور که مشاهده میکنید اعداد 0 تا 10 به درستی نمایش داده شده است. حالا میخواهیم برنامه را طوری تغییر دهیم که وقتی شمارندهی برنامه به عدد 5 رسید، عملیاتی را انجام ندهد و دوباره به بررسی شرط حلقه (ابتدای حلقه) برگردد. به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { for (int i = 0; i <= 10; i++) { if (i == 5) continue; System.out.println("NUM[" + i + "]: " + i); } } }
همانطور که مشاهده میکنید ما با ساختار if شرطی را بررسی کردیم که اگر شمارندهی حلقه برابر با عدد 5 شد، ادامهی حلقه اجرا نشود و به ابتدای حلقه بازگردد. خروجی اجرای برنامهی فوق را در زیر با دقت نگاه کنید:
NUM[0]: 0 NUM[1]: 1 NUM[2]: 2 NUM[3]: 3 NUM[4]: 4 NUM[6]: 6 NUM[7]: 7 NUM[8]: 8 NUM[9]: 9 NUM[10]: 10
همانطور که مشاهده میکنید عدد پنج در خروجی چاپ نشده است. زیرا ما شرطی را در برنامه قرار دادیم که وقتی که شمارندهی برنامه برابر 5 شد حلقه ادامه پیدا کند (یعنی کدهای بعد از continue اجرا نشود و به سراغ ابتدای حلقه برود). خب وقتی برنامه به سراغ ابتدای حلقه میرود، مسلما به شمارندهی برنامه یک واحد اضافه میشود. بنابراین عدد 5 چاپ نمیشود.
حالا میخواهیم برگردیم به کاربرد برچسبها در برنامه. ابتدا به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { outer: for (int i = 0; i < 10; i++) { inner: for (int j = 0; j < 10; j++) { System.out.println("Inner: " + j); if (i == 5) { break; } } System.out.println("Outer: " + i); } } }
ما اصلا به خروجی برنامه کاری نداریم. در بالا یک حلقهی تو در تو ایجاد کردهایم و برای حلقهی داخلی یک شرطی قرار دادهایم تا دستور break اجرا شود. در اینجا زمانی که شرط ساختار if برقرار باشد، دستور break به طور پیش فرض برایحلقهی داخلی اجرا میشود. اما فرض کنید ما میخواهیم برنامهای بنویسیم که دستور break را از داخل حلقهی داخلی، برای حلقهی خارجی اجرا کنیم. در اینجاست که کاربرد برچسبها به چشم میآید. در کد بالا اگر بخواهیم حلقهی خارجی را break کنیم باید کد را به صورت زیر تغییر دهیم:
public class MainClass { public static void main(String[] args) { outer: for (int i = 0; i < 10; i++) { inner: for (int j = 0; j < 10; j++) { System.out.println("Inner: " + j); if (i == 5) { break outer; } } System.out.println("Outer: " + i); } } }
همانطور که مشاهده میکنید کلمهی کلیدی break را نوشته و سپس در جلوی آن نام برچسب حلقهی مورد نظر را نوشتهایم. حالا اگر برنامه را اجرا کنیم و اجرای برنامه به ساختار if برسد و شرط برقرار باشد، break برای حلقهی خارجی اجرا میشود.
()random یکی از متدهای کلاس Math است که با استفاده از آن میتوانیم یک عدد تصادفی اعشاری تولید کنیم. عدد تصادفیای که این متد تولید میکند، یک عدد بین صفر و یک است که شامل صفر میشود ولی شامل یک نمیشود. به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { double d = Math.random(); System.out.println(d); } }
در کد بالا با استفاده از متد ()random یک عدد اعشاری تصادفی ایجاد و در داخل متغیر d ذخیره کردهایم. خروجی برنامهی بالا به صورت زیر است:
0.7197274320722393
برنامه را هر بار که اجرا کنید خروجیهای متفاوتی را مشاهده میکنید. اما عدد تولید شده بین صفر و یک است.
حالا میخواهیم یکی از مباحث جذاب برنامه نویسی کاربردی یعنی شبیه سازی بازی ریختن تاس را مورد بررسی قرار دهیم. این برنامه را به شکلهای مختلف میتوان پیادهسازی کرد. تاس 6 وجه دارد که با ریختن آن یکی از اعداد 1 تا 6 ظاهر میشود. نکتهی اول این است که اعداد تاس صحیح هستند، در صورتی که اعداد تولید شده توسط متد ()random اعشاری است. پس ابتدا باید عمل Casting را انجام دهیم تا عدد اعشاری را به عدد صحیح تبدیل کنیم. به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { double d = Math.random(); int i = (int) d; System.out.println(i); } }
اگر برنامهی بالا را اجرا کنید به جز صفر عدد دیگری را در خروجی مشاهده نمیکنید. زیرا همانطور که گفته شد متد ()random عددی اعشاری بین صفر و یک تولید میکند که عدد شامل صفر است اما شامل یک نیست. بنابراین قسمت صحیح عدد که صفر است اصلا تغییر نمیکند و با هر بار اجرای برنامه فقط قسمت اعشاری آن تغییر میکند. حالا ما در کد بالا با کست کردن قسمت اعشاری عدد را از دست دادهایم. بنابراین به جز صفر عدد دیگری نمیبینیم. حالا برای اینکه عدد تصادفی را به محدودهی مورد نظر خود ببریم (یک عدد بین 0 تا 6) کافی است عدد بدست آمده از متد ()random را در 6 ضرب کنیم تا اعدادی در بازهی 0 تا 6 تولید شود. به شکل زیر:
public class MainClass { public static void main(String[] args) { double d = Math.random() * 6; int i = (int) d; System.out.println(i); } }
حالا اگر برنامه را اجرا کنیم عدد بدست آمده، عددی است بین صفر تا 6 که شامل صفر میشود اما شامل 6 نمیشود. اما از آنجا که در تاس عدد صفر وجود ندارد و عدد 6 وجود دارد، بنابراین باید برنامه را طوری تغییر دهیم که عددهای تولید شده بین 1 تا 7 باشد. که شامل عدد 1 باشد اما شامل عدد 7 نباشد. راه حل این کار بسیار ساده است. فقط کافی است حاصل عبارت فوق را یک واحد افزایش دهیم. به کد زیر توجه کنید:
public class MainClass { public static void main(String[] args) { double d = Math.random() * 6 + 1; int i = (int) d; System.out.println(i); } }
حالا با هر بار اجرای برنامهی فوق، همانند این است که شما یک تاس را ریختهاید تا یک عدد مشاهده شود که این عدد شامل عددهای 1 تا 6 میشود.
دورهی آموزش زبان برنامه نویسی جاوا که اینجا منتشر میشود در ابتدای راه است و هنوز مطالب بسیار زیادی است که گفته نشده است. تا این آموزش ما تقریبا 95 درصد مطالب پایهی جاوا را آموزش دادهایم (شامل مفهوم متغیر، ساختارهای تکرار و شرطی و ...) و از یک الی دو آموزش بعدی به سراغ مفاهیم پیشرفتهتر جاوا مثل برنامه نویسی شی گرا، آشنایی با سیستم فایل، تردها، ارتباط با پایگاه داده، طراحی رابط گرافیکی و ... میرویم. بنابراین ما میخواهیم این دورهی آموزشی را به بهترین شکل ممکن پیش ببریم و برای این کار، به پیشنهادات و انتقادات شما کاربران عزیز نیازمند هستیم. اینکه آموزشها را چگونه در آینده ادامه دهیم. آیا به همین شکل متنی خوب است و یا اینکه آموزشهای ویدیویی بهتر است؟ لطفا تمام جوانب را در نظر بگیرید. به عنوان مثال اگر آموزش به صورت ویدیویی منتشر شود حجم فایل آموزشها به شدت افزایش پیدا میکند و ممکن است در دانلود آن با مشکل رو به رو شوید.
در جلسهی قبل IDE محبوب اکلیپس را دانلود کردیم. در این جلسه میخواهیم نحوهی استفاده از این IDE را آموزش دهیم. بنابراین یاد میگیریم که چطور یک پروژهی جاوایی در اکلیپس ایجاد کنیم و همچنین با نحوهی ساختن کلاس آشنا میشویم. در این جلسه دقیقا کارهایی را که در قسمت آموزش برنامه نویسی جاوا: Hello World به صورت دستی انجام دادیم، توسط اکلیپس انجام میدهیم تا شما در همین ابتدای کار به ضرورت وجود IDE ها در برنامه نویسی پی ببرید.
بعد از اینکه دانلود برنامهی اکلیپس به پایان رسید، ابتدا باید فایل را از حالت فشرده خارج کنید. برای این کار میتوان از اپلیکیشنهایی که در این زمینه تولید شدهاند استفاده کرد یا میتوان از ابزارهای خوده سیستم عامل استفاده کرد. بنده از اپلیکیشن WinRAR برای این کار استفاده میکنم. بهتر است که فایل اکلیپس را در محلی از هارد دیسک قرار دهیم که دسترسی به آن آسان باشد. Desktop را به شما پیشنهاد میکنم. بعد از اینکه فایل اکلیپس را به دسکتاپ انتقال دادیم، بر روی فایل کلیک راست کرده و گزینهی Extract Here را انتخاب میکنیم تا در همان دسکتاپ از حالت فشرده خارج شود. (تصویر زیر):
بعد از اینکه فایل ZIP را از حالت فشرده خارج کردید، فایلی ایجاد میشود با نام eclipse. وارد این فایل شوید. برنامهی اکلیپس نیازی به نصب ندارد و برای اجرا، شما باید فایل eclipse.exe را اجرا کنید. (در تصویر زیر با یک بیضی سبز رنگ مشخص شده است):
بعد از اینکه بر روی فایل اجرایی اکلیپس کلیک کردید، با اولین پنجرهای که مواجه میشوید، پنجرهی زیر است.
این پنجره Workspace Launcher نام دارد. همانطور که از نامش پیداست، مسیره ذخیرهسازی پروژههایی که ما ایجاد میکنیم را در هارد دیسک مشخص میکند. بنابراین بهتر است که مسیر Workspace را همان دسکتاپ قرار دهیم. اما قبل از مشخص کردن مسیر، ابتدا در دسکتاپ فولدری با نام workspace ایجاد کنید و سپس با استفاده از دکمهی Browse مسیر workspace در دسکتاپ را انتخاب کنید. اما قبل از OK کردن، به CheckBox (چک باکس) که در تصویر بالا با یک فلش قرمز رنگ مشخص شده است توجه کنید. اگر این گزینه فعال نباشد، با هر بار بستن اکلیپس و اجرای مجدد آن، این پنجره نمایش داده میشود و از شما درخواست مجدد مشخص کردن Workspace را میکند. بنابراین، این گزینه را انتخاب کنید و بعد بر روی دکمهی OK کلیک کنید تا برنامه اکلیپس اجرا شود. (بعد از اجرا با تصویر زیر مواجه میشوید):
همانطور که مشاهده میکنید اکلیپس به شما خوش آمد میگوید. با این صفحه کاری نداریم. بنابراین همانطور که در گوشه بالا، سمت راست تصویر با یک فلش سبز رنگ مشخص شده است، بر روی دکمهی Worckbench کلیک کنید تا وارد صفحهی اصلی برنامه شوید. (تصویر زیر):
حالا وقت آن است که اولین پروژهی جاوایی خودمان را ایجاد کنیم. برای ساختن پروژه، ابتدا از منوی File گزینهی New را انتخاب کنید و بعد اولین گزینه، یعنی Java Project را انتخاب کنید. (تصویر زیر):
بعد از انتخاب گزینه Java Project، با پنجرهی زیر مواجه میشوید:
همانطور که در تصویر فوق مشاهده میکنید، پنجرهای برای ساختن پروژه ظاهر شده است. ابتدا یک نام برای پروژهی خود انتخاب میکنیم. ما در این آموزش نام: FirstJavaProgrm را نوشتهایم. به بقیهی گزینههای این صفحه کاری نداشته باشید. بنابراین بر روی دکمهی Finish کلیک کنید. بعد از ساخته شدن پروژه، باید یک کلاس بسازیم.
در این جلسه از آموزش برنامه نویسی جاوا میخواهیم JDK (یا ماشین مجازی جاوا) را بر روی سیستم عامل ویندوز نصب کنیم. برای دانلود و نصب JDK باید به سایت اوراکل مراجعه کنیم. اما فعلا دسترسی به سایت اوراکل ممکن نیست. اما در ادامهی آموزش گفته شده که چگونه وارد سایت اوراکل شویم. در ادامه با ما همراه باشید.
اگر بخواهیم وارد سایت اوراکل شویم، باید از VPN استفاده کنیم. در ادامه نحوه دانلود JDK و نصب و معرفی آن به سیستم عامل ویندوز را توضیح میدهیم.
ابتدا در سیستم عامل ویندوز، دکمههای ترکیبی Windows + R را نگه دارید. در پنجره ظاهر شده عبارت CMD را تایپ کنید.
بعد از کلیک روی دکمه OK وارد پنجره Command Prompt می شوید. در این پنجره دستور زیر را تایپ کنید.
java -version
ابتدا کلمه java را نوشته و بعد یک فضای خالی (space) ایجاد کنید و بعد یک علامت – (خط فاصله) و بعد از آن بدون وارد کردن space کلمه version را تایپ کنید و بعد دکمه ENTER را فشار دهید. توجه داشته باشید که عبارت version را با حروف کوچک تایپ کنید. (با تصویر زیر مواجه میشوید):
این جمله به این معنی است که یا جاوا روی سیستم عامل نصب نیست، یا اگر نصب است به سیستم معرفی نشده است.
حالا میخواهیم JDK را از سایت اوراکل دانلود کنیم. به آدرس oracle.com میرویم. بعد از وارد شدن به سایت، با شکلی مشابه زیر مواجه میشویم:
در ادامه ماوس (موس) خود را روی دکمه دانلود نگه دارید(عکس شماره 1) و بعد در پنجره باز شده، از قسمت چپ گزینه Java SE (عکس شماره 2) را کلیک کنید.
بعد از کلیک کردن روی Java SE با صفحه زیر مواجه می شوید.
همانطور که در شکل بالا مشاهده می کنید، روی دکمهی مشخص شده کلیک کنید تا وارد صفحه زیر شوید:
ابتدا گزینه Accept License Agreement را انتخاب کنید و بعد از داخل کادر قرمز رنگ (در شکل بالا) JDK مورد نیاز با سیستم عامل خود را دانلودکنید.
بعد از دانلود JDK، روی فایل JDK راست کلیک کرده و بعد گزینه Run as Administrator را انتخاب کنید تا مراحل نصب آغاز شود.
نصب JDK بسیار راحت است و فقط کافی است چند بار روی دکمه Next کلیک کنید. پیشنهاد میکنیم به هیچ عنوان تنظیمات پیش فرض مراحل نصب را تغییر ندهید. همانطور که در عکس بالا مشاهده میکنید روی دکمه Next کلیک کنید تا با عکس زیر مواجه شوید.
در این پنجره میتوانید مسیر نصب JDK را مشخص کنید.(لطفا تغییر ندهید تا با آموزش هماهنگ باشید). در این مرحله هم روی دکمهی Next کلیک کنید.
همانطور که در تصویر بالا مشاهده میکنید، منتظر بمانید تا مراحل نصب انجام شود. بعد از پایان این مرحله شما باید محل نصب JRE را انتخاب کنید که باز هم لطفا مانند قبل تغییری ایجاد نکنید و روی دکمهی Next کلیک کنید.
دوباره منتظر بمانید تا عملیات نصب انجام شود.
بعد از پایان عملیات نصب با پنجره زیر مواجه میشوید. روی دکمه Close کلیک کنید.
تا اینجای کار ما جاوا را نصب کردهایم. حال باید جاوا را به سیستم معرفی کنیم. برای این کار، ابتدا وارد کنترل پنل شوید و بعد بر روی گزینه System کلیک کنید. (تصویر زیر، دایره قرمز رنگ).
بعد از کلیک کردن بر روی System وارد پنجره زیر میشوید. و بعد روی گزینه Advanced system settings کلیک کنید. (عکس زیر، دایره قرمز رنگ).
بعد از کلیک کردن روی گزینه Advanced system settings وارد پنجره زیر میشوید. که طبق عکس زیر روی گزینه مشخص شده کلیک کنید.
بعد از کلیک کردن روی گزینه Environment Variables وارد پنجره جدیدی میشوید همانند عکس زیر. در قسمت system variables روی دکمه New کلیک کنید.
بعد از کلیک روی دکمه New پنجرهای باز میشود که ما میتوانیم یک متغیر جدید بسازیم. برای نام متغیر، دقیقا جمله زیر را بنویسید(حساس به حروف بزرگ و کوچک):
JAVA_HOME
و برای مقداره متغیر (Variable value) مسیر نصب JDK را قرار دهید. (اگر تنظیمات پیش فرض نصب JDK را تغییر نداده باشید، JDK در مسیر: C:\Program Files\Java\jdk1.8.0_60 نصب شده است. بنابراین برای مقدار value مسیر JDK را کپی کنید و در قسمت value پیست کنید و بعد روی دکمه OK کلیک کنید (همانند تصویر زیر).
بعد از این مرحله باید مسیر دایرکتوری bin را در متغیر سیستمی PATH قرار دهیم. برای این کار دوباره در قسمت system variables به دنبال متغیر path بگردید.( همانند تصویر زیر).
بعد از انتخاب متغیر path (کلیک روی path)، روی دکمه Edit… کلیک کنید تا پنجره زیر ظاهر شود. در قسمت value به آخر خط رفته (می توان با فشار دادن دکمه End روی کیبورد به آخر خط رفته) و سپس یک سِمی کالِن قرار دهید.
بعد از قرار دادن سمی کالن، نشانگر ماوس خود را بعد از سمی کالن قرار دهید و بعد مسیر دایرکتوری bin را در این قسمت paste کنید.
مسیر دایرکتوری: C:\Program Files\Java\jdk1.8.0_60\bin. (همانند عکس زیر):
بعد از این کار تمام پنجرههای باز را OK کرده و ببندید. در آخر دوباره وارد پنجره Command Prompt شوید و دوباره دستور زیر را وارد کنید:
java -version
این پیغام نشان دهنده این است که جاوا بر روی سیستم نصب و معرفی شده است.
در واپسین روزهای سال ۲۰۱۵ بازار رتبه بندی ترین های سال به مانند سال های گذشته داغ است. اخیرا نیلسن لیستی از 10 اپلیکیشن پرطرفدار سال ۲۰۱۵ در آمریکا منتشر کرده است.
آنالیز اولویتهای افراد در موسیقی، ویدئو و دیگر زمینههای تکنولوژی یکی از تخصصهای نیلسن است که اخیرا شاهد رتبهبندی پرطرفدارین اپلیکیشن های موبایل سال ۲۰۱۵ در آمریکا از جانب آن هستیم. حقیقتا قرار گرفتن اپلیکیشن فیسبوک با ۱۲۶.۷ میلیون کاربر فعال ماهانه در رتبهی نخست خیلی دور از انتظار نبود. نتایج منتشر شده در این گزارش بازهی زمانی ژانویه تا اکتبر ۲۰۱۵ را شامل میشود. این میزان کاربر اپ فیسبوک نسبت به مدت مشابه سال گذشته ۸ درصد رشد داشته است.
جایگاه دوم در رتبهبندی پرطرفدارترین اپلیکیشن های موبایل سال ۲۰۱۵ در آمریکا به یوتیوب اختصاص دارد. یوتیوب به صورت ماهانه ۹۷.۶ میلیون کاربر دارد. این میزان نسبت به مدت مشابه سال ۲۰۱۴ رشدی ۵ درصدی داشته است. اپ مسنجر فیسبوک با اختلاف اندکی نسبت به یوتیوب با ۹۶.۴ میلیون کاربر در جایگاه سوم قرار گرفته است. شایان ذکر است این میزان رشدی ۳۱ درصدی را نسبت به سال گذشته تجربه کرده است. این رشد قابل توجه مسنجر فیسبوک باعث شده است این اپ لقب سریعترین رشد در استفادهی کاربران از یک اپلیکیشن در سال ۲۰۱۵ را به خود اختصاص دهد.
گوگل با ۴ اپلیکیشن گوگل سرچ، گوگل پلی، گوگل مپس و جیمیل رتبههای چهارم تا هفتم را به خود اختصاص داده است. سرانجام نوبت به اپلیکیشن اینستاگرام میرسد تا با ۵۵.۴ میلیون کاربر جایگاه هشتم را کسب کند. اپل نیز با دو اپلیکیشن موزیک و نقشه خود جایگاههای نهم و دهم را به خود اختصاص داده است.
نیلسن همچنین اعلام کرده است که این اطلاعات از ۳۰,۰۰۰ کاربر بالای ۱۳ سال در آمریکا کسب شده است. اطلاعات به دست آمده نشان میدهد که ۵۳ درصد از کسانی که به این اپلکیشنها دستری دارند از سیستمعامل اندروید استفاده میکنند و ۴۳ درصد نیز کاربر iOS هستند.
اولین طراحی وبسایت تاریخ اینترنت، ۲۵ سال قبل در چنین روزهایی آنلاین شد. این صفحه که ۲۰ دسامبر سال ۱۹۹۰ به حالت عمومی درآمد، یک صفحه در مورد نحوهی انجام پروژهای خاص توضیح داده بود. هر چند این وبسایت بسیار کوچک بود اما پایهای برای ساخت وبسایتهای امروزی شد.
۲۵ سال قبل در چنین روزهایی بارنز لی اولین وبسایت جهان را راه اندازی و زیرساختهای جهان وب امروزی را پایه گذاری کرد. او امروز نیز در همکاری نزدیک با جهان وب بوده و مدیر کنسرسیوم وب جهان گستر است و تلاشهای گستردهای برای داشتن جهان وب آزاد انجام میدهد.
وب بیشتر یک پلتفرم است تا دستهای از اطلاعات و حالا میتوان آن را در همه جا از گوشیها تا تلویزیونها نیز مشاهده کرد. وظیفهی این بستر سالها است ثابت مانده و آن فراهم کردن ابزاری برای به اشتراکگذاری اطلاعات در سرتاسر دنیا است که برای اولین بار ۲۵ سال قبل پا به عرصهی وجود عمومی گذاشت.
شاهکاری دیگر از سوپرسل، سازنده بازی کلش آو کلنز
Boom Beach نام بازی بسیار زیبا و محبوب در سبک بازی های استراتژیکی دارای گرافیک اچ دی خیره کننده و شاهکاری دیگر از کمپانی بازی سازی Supercell خالق بازی های پرطرفدار کلش آف کلینز و Hay Day می باشد که جدیدترین نسخه آن به تازگی در گوگل پلی ریلیز شده است.در این گیم اندرویدی شما باید با استفاده از قایق ها و سایر تجهیزاتی که در اختیار دارید افراد و سربازان خود را به جزایر دشمن رسانده، برده ها را آزاد کنید و غنایم دشمن را به غارت ببرید! بهترین استراتژی را به کار بگیرید و سعی کنید کمترین صدمه به نیروهای شما وارد شود.با غارت کردن معادن و منابع دشمنان امتیاز خود را افزایش دهید و سلاح های جدید بسازید و با تقویت ارتش خود، امپراطوری را در دست بگیرید!
گرافیک این بازی بسیار شبیه به بازی معروف clash of clans می باشد و شخصیت های کارتونی آن جذابیت بازی را دوچندان کرده و ما این بازی زیبا را به تمامی دوستداران بازی های استراتژیک حتما پیشنهاد می کنیم!
– جستجو و کاوش جزایر مختلف، پیکار با دشمنان و کشف گنجینه های ارزشمند !
– داشتن سازه ها و منابع مختلف برای مقابله با دشمنان
– دارا بودن نیروهای نظامی و سربازان مختلف برای نابود کردن غارتگران
– بازی کردن با سایر بازیکنان دنیا و رقابت به صورت آنلاین
– گرافیک اچ دی بسیار زیبا + صداگذاری و موسیقی متن شنیدنی
* اضافه شدن گروه های نظامی جدید با بازی نظیر Torcher
* افزوده شدن ویژگی های جدید مانند Power Base به بازی
* اضافه شدن Radar برای بررسی جزئیات ضربه های شما
* رفع باگ ها و بهبود گرافیک و گیم پلی
همانطور که می دانید این بازی به صورت آنلاین است و برای اجرای آن نیاز به اینترنت دارید.
500 تایی 19900
1200 تایی 38900
1700 تایی 58900
2500 تایی 78900
3000 تایی 98900
دو راه افزایش ترافیک سایت داریم:
تبلیغات و دیگری تولید محتوا می باشد که هر کدام هزینه ی مختلفی دارند. در این مطلب هزینه ی این دو روش را بررسی می کنیم.
اکثر افراد تمایل دارند به صورت قدیمی و سنتی تبلیغات خود را انجام دهند چرا که از بازاریابی درون گرا هیچ آگاهی ندارند. هنگامی که شما بر روی تبلیغی کلیک می کنید و به صفحه ی پیوندها وصل می شوید نمره کیفیت کاهش می یابد. نمره کیفیت مضربی از 10 است که بر اساس ارتباط کلید واژه های انتخابی صفحه فرود، تعداد دفعات کلیک بر روی متن تبلیغ و ...است تعیین می شود و بر هزینه های تبلیغی گوگل تاثیر می گذارد.
حال هزینه تبلیغات گوگل را با تولید محتوا مقایسه می کنیم:
برای مثال هر مطلب تخصصی تولید شده برای شما 75000 تومان باشد. اگر خواهان تبلیغات در گوگل هستید برای هر کلیک باید 50 سنت پرداخت نمایید. با فرض اینکه قیمت دلار 3000 تومان باشد به ازای هر کلیک 1500 تمام برای شما هزینه ایجاد می کند بطور ساده تر به مقدار 75000 تومان در گوگل تبلیغلات انجام دهید فقط 50 کلیک رای شما ثبت خواهد شد.به نظر شما آیا متن تبلیغی ایجاد شده برای وبلاگ ویا سایت شما و اشتراک آن در شبکه های اجتماعی کمتر از 50 کلیک برای شما به همراه خواهد داشت
در بررسی بازار مسلما تعداد کلیک در بازاریابی محتوا بیشر خواهد بود چرا که متن در وبلاگ باقی خواهند ماند و تاریخ انقضا ندارد و مدام در گوگل جستجو و یافت می شود و کاربران با کلیک بر روی آن وارد سایت شما می شوند.