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

طبقه بندی موضوعی

۸ مطلب با کلمه‌ی کلیدی «جاوا» ثبت شده است

۲۷
فروردين

با استفاده از عملگر باقی مانده ی تقسیم (%):

همون طور که در ریاضیات عددی زوج است که باقی مانده ی تقسیم اش بر دو ، صفر باشد. پس به عنوان یک روش با استفاده از % زوج بودن عددی را تعیین میکنیم:

boolean is_even = (n % 2 == 0);

تعیین زوج و فرد با استفاده از عملیات بیتی و عملگر بیتی &:

برای این کار ما به آخرین رقم از مقدار باینری عدد نیاز داریم که با and کردن آن با یک به دست می آید. به این صورت:

number & 1

اگر حاصل یک باشد، عدد فرد است و اگر صفر باشد، عدد زوج است.

برای مثال :

1-پنج فرد است پس: 

0000 0101 & 0000 0001 = 0000 0001

2- و شش زوج است:

0000 0110 & 0000 0001 = 0000 0000

و نمونه کد جاوا :

if( (number&1) == 0){
      system.out.println("even");
   }else{
        system.out.println("odd");
      }

در زیر کاپوت :

همان طور که میدانید عملگر منطقی and (&) دو مقدار دودویی با طول مساوی دریافت کرده و بر روی هر جفت بیت متناظر، عملیات عطف منطقی را انجام می‌دهد. نتیجه وقتی ۱ می‌شود که اولین بیت و دومین بیت هر دو با هم ۱ باشند، در غیر این صورت صفر خواهد بود.

جدول زیر را در نظر بگیرید:

20 21 22 23 24 25 26 27 28 29
1 2 4 8 16 32 64 128 256 512

دو به توان هر عدد صحیح غیر منفی و صفر ، همیشه زوج خواهد بود. (نمی دونم صفر مثبته یا منفی؟)

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

عدد یک در مبنای دو برابر با یک است و به سمت چپ تمامی ارقام صفر خواهند بود و این هیچ تاثیری بر ارزش عدد ندارد. (00000001) .

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

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

  • younes RayanFar
۰۲
بهمن

من عاشق جاوا هستم

چون کار ها رو خیلی راحت کرده مثلا این تصویر رو ببینید:

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

فکرش رو کنید باید از خطوط راهنما استفاده میکردم و یک تصویر 1000 در 50 پیکسلی که در صفحه نمایش من با توجه به رزولوشن ، 370 واحد از خط کش فتوشاپ بود ، به بیست قسمت مساوی تقسیم کنم بعد از 100 تا منهای 100 درجه بندی کنم چقدر وقت میبرد.

میانبر زدم

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

package paint;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

/**
 *
 * @author yn
 */
public class paint{

    static BufferedImage buffImage = null;
    static Graphics2D g2;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        init();
        draw_line();

        write();

    }

    public static void init() {
        buffImage = new BufferedImage(1000, 50, BufferedImage.TYPE_INT_ARGB);
        g2 = buffImage.createGraphics();
    }

    public static void draw_line() {
        g2.setStroke(new BasicStroke(2));
        g2.setColor(Color.green);
        g2.drawLine(0, 25, 1000, 25);

        int c = 100;
        for (int i = 0; i <= 1000; i += 50) {
            g2.drawLine(i, 30, i, 20);

            if (i == 0) {
                g2.drawString(c + "", i + 2, 15);
            } else if (i == 1000) {
                g2.drawString(c + "", i - 25, 15);
            } else {
                g2.drawString(c + "", i - 5, 15);
            }

            c -= 10;
        }
    }


    public static void write() {
        try {
            File outputfile = new File("saved.png");
            ImageIO.write(buffImage, "png", outputfile);

        } catch (Exception e) {
            System.out.println(e);
        }
    }

}

  • younes RayanFar
۲۵
بهمن

کانال تلگرام آموزش جاوا (تمرین و درسنامه) 

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

  • younes RayanFar
۰۳
مهر

نکته شماره 2 : دسترسی به کلاس ها و متد ها و متغییر ها رو محدود کنید.

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

  • younes RayanFar
۰۳
مهر

نکته اول : سعی کنید کلاس هاتون وابسته به مقدار دهی اولیه نباشند.

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

راه های زیادی برای این کار وجود داره مثلا میتونید:

  • بهتره تمام متغییر ها به صورت خصوصی باشند.(اگر نیازه از بیرون بهشون دسترسی داشته باشند با متدهای set و get این کار انجام بدهید ، این باعث میشه تا متغییر هایی که هنوز مقدار دهی اولیه نشده اند از دستکاری پیش بینی نشده محافظت شوند).
  • برای هر نمونه از کلاس یک متغییر بولین مشخص کننده مقدار دهی اولیه شده یا نشده در نظر بگیرید.
  • وضعیت متغییر بولین یاد شده رو در سازنده و قبل عبارت return تغییر بدهید.
  • برای هر متد غیر سازنده دیگه ای ابتدا چک کنید آیا متغییر بولین مذکور true است یا خیر اگر true بود اجرا شود وگرنه استثنایی بی اندازد، فراموش نکنید این را باید قبل از هر کار دیگه ای در آن متد انجام بدهید.

اگر درک درستی از برنامه نویسی شئ گرا داشته باشید مطمئنا متوجه شده اید که یک خرابکار چطور میتونه از این طریق سوء استفاده کند.

تو پست بعدی در این باره و متد های استاتیک خواهم نوشت.

  • younes RayanFar
۲۰
مرداد

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

بهتره آخرین نسخه را از سایت آپاچی دریافت و unzip کنید.

برای استفاده از آن باید مسیر برنامه را به متغییر محیطی path در ویندوز اضافه کنید. 

شاید در آینده مطالب بیشتری در این مورد نوشتم.

  • younes RayanFar
۱۴
مرداد

بعضی وقت ها نیاز هست برنامه restart بشه مثلا وقتی که آپدیتی را از اینترنت دریافت میکنه و یا وقتی که یک پلاگین جدید نصب میکنید(البته اگر از OSGI استفاده کنید نیازی به restart نیست) به هر حال هیچ راه ساده ای نیست مگر از دستورات خط فرمان استفاده کنید که در جاوا امکانات خوبی برای این کار وجود داره.

  • younes RayanFar
۲۶
تیر

برای کار با فایل در جاوا از یک نمونه از کلاس File استفاده میشود. میتونیم توش بنویسیم و ازش بخونیم اما تا وقتی متد createNewFile را فراخوانی نکنیم هیچ فایلی واقع رو دیسک سخت ایجاد نمیشه! در واقع هر کاری کردیم روی رم بوده.

  • younes RayanFar