دانستنی‌ها

جاوا، لطفا از رشته‌های چندخطی پشتیبانی کن!

در این مطلب به نقل از Lukas Eder نویسنده dzone، از اوراکل و تیم جاوا خواهش می‌کنیم از رشته‌های چندخطی پشتیبانی کند.

چقدر شما کد‌هایی به این شکل دارید؟

try (PreparedStatement s = connection.prepareStatement(
    "SELECT * "
  + "FROM my_table "
  + "WHERE a = b "
)) {
    ...
}

مشکلش چیست؟

درست بودن سینتکس: مثلا یک فاصله را در انتهای خط فراموش نکنید.

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

تزریق SQL: مگر به ما نیاموختند که برای جلوگیری از SQL Injection، رشته‌ها را در SQL این چنین ترکیب نکنید؟ مسلما، کد بالا هم امن است اما اگر یک برنامه‌نویس تازه‌کار برای مراقبت و نگهداری، اشتباهی ورودی کاربر را این چنین قرار دهد چه؟

Xtend زبان جالبی است که به کد جاوا کامپایل می‌شود. Xtend برای تمپلت ‌سازی بسیار مفید است. یک ویژگی جالب آن به شکل زیر است:

استفاده از سه آپوستروف برای رشته های چند خطی:

// Xtend
val regex = '''import java\.lang\.AutoCloseable;'''

بله عبارت فوق یک عبارت منظم صحیح در جاوا است. اما در اینجا نیازی به نادید گرفتن نقطه‌ها با دو backslash هم به شکل زیر نیست.

// Java
String regex = "import java\\.lang\\.AutoCloseable;";

پس در قالب همان SQL چیزی شبیه زیر می‌شود:

try (PreparedStatement s = connection.prepareStatement(
    '''SELECT *
       FROM my_table
       WHERE a = b'''
)) {
    ...
}

به همراه یک افزونه عالی دیگر هم به اسم String interpolation  (که حتی PHP هم دارد) هم به شکل زیر در می‌آید:

String tableName = "my_table";
int b = 1;
try (PreparedStatement s = connection.prepareStatement(
    '''SELECT *
       FROM ${tableName}
       WHERE a = ${b}'''
)) {
    ...
}

بهبود کوچک اما بسیار موثر

این تغییر از لحاظ پیچیدگی زبانی بسیار ساده اما فوق‌العاده کارآمد برای کسانی است که زبان دیگری مثل SQLو XMLو XPath و Regex را درون جاوا مورد استفاده قرار می‌دهند. این روال بسیار مورد استفاده قرار می‌گیرد و به شدت مورد انزجار است. تیم جاوا! لازم هم نیست به قدرتمندی Xtend باشد. شروع آن هم عالی است.

منبع:

https://dzone.com/

http://stackoverflow.com/

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا