آشنایی Assertion جاوا
در این مقاله قصد داریم تا مبحث Assertion در جاوا را مورد بررسی قرار دهیم. حتما برای شما پیش آمده است که در کد ها با کلمه کلیدی assert مواجه شده باشید. اکنون میخواهیم کاربرد این کلمه کلیدی را مورد بررسی قرار دهیم. assert در جاوا ۱.۴ معرفی شد و به شدت boilerplate code ها را کاهش میدهد. به این ترتیب خوانایی افزایش مییابد. boilerplate code ها به کد هایی اتلاق میشود که در چندین جای برنامه, بدون تغییر و یا با کمترین تغییری مجددا استفاده میشوند. برای مثال این قطعه کد را در نظر بگیرید:
JDBC4Connection jdbc4Connection = getConnection(); if (jdbc4Connection == null) { throw new RuntimeException("null connection"); }
با استفاده از assertion میتوانیم قطعه مربوط به if و throw را حذف کنیم. اگر کد بالا را اجرا کنیم، در صورت null بودن مقدار jdbc4Connection, چنین خروجی برای ما چاپ میشود:
java.lang.RuntimeException: null connection
اما میتوانیم این قطعه کد را با استفاده از assertion خلاصه تر کنیم:
JDBC4Connection jdbc4Connection = getConnection(); assert jdbc4Connection != null;
به این ترتیب پس از اجرای کد فوق چنین خروجی برای ما نمایش داده میشود:
java.lang.AssertionError
اما اگر بخواهیم پیام نمایش داده شده را تغییر دهیم باید به این صورت بنویسیم:
JDBC4Connection jdbc4Connection = getConnection(); assert jdbc4Connection != null : "Connection Failed";
و خروجی آن به این صورت تغییر میکند:
java.lang.AssertionError: Connection Failed
بنابراین با استفاده از مثال های فوق دیدیم که با استفاده از assertion میتوانیم بعضی از بررسی ها و ایجاد exception ها را آسان تر انجام دهیم. اگر شرطی که assert بر روی آن قرار میگیرد تحقق یابد، بدون خطا کد ادامه مییابد. اما اگر شرط محقق نگردد و یک exception ایجاد میشود. در حقیقت پس از مردود شدن یک شرط، JVM به صورت خودکار یک AssertionError را ایجاد میکند.
در کلاس AssertionError از کلاس Error ارث بری شدهاست که این کلاس نیز از Throwable ارث بری کردهاست. بنابراین کلاس Error و کلاس AssertionError، بدون نیاز به نوشتن try/catch قابل استفاده هستند و به آنها uncheck exception گویند. علت این امر نیز این است که AssertionError برای خطا هایی استفاده میشود که قابل رفع نیستند. بنابراین هرگز به هنگام استفاده از assert از try/catch استفاده نکنید.
بهتر است برای استفاده از assert به این نکات توجه کنیم:
- از assert برای بررسی null بودن یک object و یا empty بودن یک optional استفاده کنید.
- از assert برای بررسی متغیر های ورودی یک متد public استفاده نکنید. زیرا دسترسی به این متد ها کلی تر است و بهتر است از IllegalArgumentException و یا NullPointerException استفاده کنید.
- نتیجه یک متد را با استفاده از assert بررسی نکنید و حتما مقدار آن را در یک متغیر قرار دهید و از متغیر برای بررسی شرط استفاده کنید.
در این مقاله سعی بر این شد تا با کارکرد Assert و Assertion در جاوا آشنا شویم. همچنین خطای AssertionError را نیز بررسی کردیم. همانطور که در مثال ها اشاره شد، assert میتواند از نوشتن قطعه کد های تکراری جلوگیری کند اما باید نکات ذکر شده را برای استفاده از آن در نظر گرفت. به این ترتیب میتوانیم کد هایی با خوانایی بیشتر و همچنین ساختار مشخص داشته باشیم.
با ما همراه باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.