powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Что есть appropriate для assert-ов ?
20 сообщений из 20, страница 1 из 1
Что есть appropriate для assert-ов ?
    #38581678
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Встретил в тесте такой вопрос:
Given the following code fragment:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  public class ApAssert{
    public static void main(String args[]){
      assert args.length==0;
      evaluate(args[0],false);
    }
    private static void evaluate(String s, boolean flag){
      int i=Integer.parseInt(s.trim());
      assert;
      assert flag=false;
      System.out.print("Received Status: "+flag);
      i--;
      assert i-- <=0;
    }
  }


там также есть объяснение:


авторThere are four assert statements used in this program.

The statement "assert;" which has no expression is invalid. All other assert statements are valid.

The question was not about validity/invalidity of assert statements - it was about "appropriate" usage of assertions..

The statement "assert args.length==0;" is NOT appropriate, because of the rule:
"Using assertions to evaluate arguments of a PUBLIC method is NOT appropriate".

The statement "assert flag=false;" is NOT appropriate, because?
"Using assertions that can cause side effects, is NOT appropriate ".
(Note that the expression flag=false does an assignment, not a conditional evaluation. Therefore, it causes a side-effect).

The statement "assert i-- <=0;" also NOT appropriate because of the same reason as above.

As there is no correct use of asserts used in this program, the correct answer is Answer-A

Объясните, что вообще значит appropriate для assert-ов ?
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38581709
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Ты зобыл опубликовать сам вопрос...
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38581735
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

да))

вопрос в том какие assert-ы в коде являются "appropriate"
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582090
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90,

неужели никто не в курсе?
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582153
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90 ,
Ну а вы то как сами думаете? Посмотрите код внимательнее, там два ассерта не скомпилируются вообще, а еще один кривой. Какой - подумайте сами.
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582235
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjv,

ну а правильный ответ - все кривые
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582248
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90,

какие критерий у "appropriate"?
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582284
MaxNevermind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

1) http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html
2) Если готовитесь к OCPJP, зубрите ответ который вы сами и написали, все равно через два дня после экзамена все забудете, да и не использует никто эти ассерты как я понимаю.
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582294
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxNevermind,
Кто ва сказал, что ассерты не используют? Это отличное средство раннего отлова багов в процессе девелопмента. Кто их не использует - сам себе злобный буратино.
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582301
MaxNevermind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv,

Можете выложить часть кода где вы их использовали и когда это было?
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582307
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaxNevermind,
ссылка по теме:
http://stackoverflow.com/questions/2758224/assertion-in-java

Я читал, что это вообще очень недооцененный элемент программирования.

Я не совсем понимаю чем они лучше throw new RuntimeException()

может символов конечно поменьше.
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582309
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, их можно отключить одной кнопкой ещё.

и вроде бы в классфайлы даже ничего про них не попадёт.

ИМХО это не так уж круто.
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582351
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Разве отключить? Помоему их как раз надо специально включать в параметрах jvm а так они не работают. Мб это 1 из причин почему их не используют? ))
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582381
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892redwhite90,

Разве отключить? Помоему их как раз надо специально включать в параметрах jvm а так они не работают. Мб это 1 из причин почему их не используют? ))

имел ввиду, что если они включены....
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582384
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxNevermindМожете выложить часть кода где вы их использовали и когда это было?Пример проекта, активно использующего ассерты: https://github.com/gridgain/gridgain
Например: https://github.com/gridgain/gridgain/blob/master/modules/core/java/org/gridgain/grid/kernal/processors/job/GridJobProcessor.java
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582386
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Я не совсем понимаю чем они лучше throw new RuntimeException().Они не лучше, и не хуже. Они другие. Ассерт по своей сути - это "активный комментарий". Например, у вас есть код:
Код: java
1.
2.
3.
4.
if (a == null)
    methodA();
else
    methodB();

methodA() должен быть вызван, только когда a == null, а methodB() только когда a != null. Тогда вы берете, и запихиваете в эти методы по ассерту:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
void methodA() {
    assert a == null : "a must be null";
    ...
}

void methodB() {
    assert a != null : "a cannot be null";
    ...
}

Все, теперь если ваш коллега вдруг вызовет один из этих методов, нарушив инвариант, он словит AssertionError. Обратите внимание, я пишу "ваш коллега", а не "ваш пользователь". Ассершны - это инструмент разработчика, который помогает в раннем отлове багов в коде. Их нельзя использовать, например, для валидации параметров, которые передают пользователм, так как ассершны должны быть отключены в продакшне. Ассершн - это очень легкий, простой и эффективный механизм отлова багов в коде, который надо использовать в дополнение к обычным тестам.
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582387
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Разве отключить? Помоему их как раз надо специально включать в параметрах jvm а так они не работают. Мб это 1 из причин почему их не используют? ))По дефолту они отключены. Включать их надо только на этапе разработки для отладки.
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582471
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjvredwhite90Я не совсем понимаю чем они лучше throw new RuntimeException().Они не лучше, и не хуже. Они другие. Ассерт по своей сути - это "активный комментарий". Например, у вас есть код:
Код: java
1.
2.
3.
4.
if (a == null)
    methodA();
else
    methodB();

methodA() должен быть вызван, только когда a == null, а methodB() только когда a != null. Тогда вы берете, и запихиваете в эти методы по ассерту:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
void methodA() {
    assert a == null : "a must be null";
    ...
}

void methodB() {
    assert a != null : "a cannot be null";
    ...
}

Все, теперь если ваш коллега вдруг вызовет один из этих методов, нарушив инвариант, он словит AssertionError. Обратите внимание, я пишу "ваш коллега", а не "ваш пользователь". Ассершны - это инструмент разработчика, который помогает в раннем отлове багов в коде. Их нельзя использовать, например, для валидации параметров, которые передают пользователм, так как ассершны должны быть отключены в продакшне. Ассершн - это очень легкий, простой и эффективный механизм отлова багов в коде, который надо использовать в дополнение к обычным тестам.


ну допустим чем так хуже?

void methodA() {

if (a!=null ) throw new RuntimeException("a must be null");
assert a == null : "a must be null";
...
}

void methodB() {
f (a==null ) throw new RuntimeException("a cannot be null");
...
}
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582472
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void methodA() {

if (a!=null ) throw new RuntimeException("a must be null");
assert a == null : "a must be null";
...
}

void methodB() {
f (a==null ) throw new RuntimeException("a cannot be null");
...
} 
...
Рейтинг: 0 / 0
Что есть appropriate для assert-ов ?
    #38582474
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void methodA() {

      if (a!=null ) throw new RuntimeException("a must be null");
      ...
}

void methodB() {
     if (a==null ) throw new RuntimeException("a cannot be null");
      ...
} 
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Что есть appropriate для assert-ов ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]