21.12.2014 / 15:06 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Вот, вспомнил про презентации) 1 из 4 | Презентация |
final ternary
0: aload_0
1: aload_0
2: getfield #4 // Field x:I
5: ifge 12
8: iconst_0
9: goto 32
12: aload_0
13: getfield #4 // Field x:I
16: sipush 200
19: if_icmple 28
22: sipush 200
25: goto 32
28: aload_0
29: getfield #4 // Field x:I
32: putfield #4 // Field x:I
35: return
final non ternary
0: aload_0
1: getfield #4 // Field x:I
4: ifge 15
7: aload_0
8: iconst_0
9: putfield #4 // Field x:I
12: goto 32
15: aload_0
16: getfield #4 // Field x:I
19: sipush 200
22: if_icmple 32
25: aload_0
26: sipush 200
29: putfield #4 // Field x:I
32: return
non final non ternary
0: aload_0
1: getfield #4 // Field x:I
4: ifge 15
7: aload_0
8: iconst_0
9: putfield #4 // Field x:I
12: goto 40
15: aload_0
16: getfield #4 // Field x:I
19: aload_0
20: getfield #2 // Field screenW:I
23: bipush 40
25: isub
26: if_icmple 40
29: aload_0
30: aload_0
31: getfield #2 // Field screenW:I
34: bipush 40
36: isub
37: putfield #4 // Field x:I
40: return
non final ternary
0: aload_0
1: aload_0
2: getfield #4 // Field x:I
5: ifge 12
8: iconst_0
9: goto 40
12: aload_0
13: getfield #4 // Field x:I
16: aload_0
17: getfield #2 // Field screenW:I
20: bipush 40
22: isub
23: if_icmple 36
26: aload_0
27: getfield #2 // Field screenW:I
30: bipush 40
32: isub
33: goto 40
36: aload_0
37: getfield #4 // Field x:I
40: putfield #4 // Field x:I
43: return
__________________
let live Изменено aNNiMON (21.12 / 15:07) (всего 2 раза) |
21.12.2014 / 15:59 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| #388724, 1. Сам ни разу в байт-коде не копался, спасибо. Надо кстати на каникулах заняться уже углубленным изучением. 2. Жутко - можно скобочки поставить. 3. У меня половина полей константы, ибо IDE задал проставлять их. Magatino, здесь больше оптимизации, когда речь доходит до байт-кода.
__________________
Homo homini penis est. |
21.12.2014 / 16:16 | |
Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| Цитата Kalter: Magatino, здесь больше оптимизации, когда речь доходит до байт-кода.Вот именно, странно рассуждать об оптимизации в перемещии персонажа, Витя бы лучше делом занялся, оптимизировал то, что действительно жрёт память, короче это камень в огород PPM |
5.03.2015 / 01:31 | |
Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| А ну, гуру, выразите своё мнение, понятен ли этот код? protected function getECTSMark($rate, $current, $examRate) {
$grades = array(
'ECTS-F' => 0,
'ECTS-FX' => 0.31,
'ECTS-E' => 0.60,
'ECTS-D' => 0.65,
'ECTS-C' => 0.71,
'ECTS-B' => 0.85,
'ECTS-A' => 0.95,
);
$mark = 'Undefined';
if ($current > 0) {
$percent = $rate / $current;
if ($examRate !== NULL AND $examRate < 22)
$mark = 'ECTS-FX';
else foreach ($grades as $name => $value)
if ($percent >= $value)
$mark = $name;
}
return $mark;
}
|
5.03.2015 / 09:01 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Ксакеп, понятен.
__________________
let live |
5.03.2015 / 15:53 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| Как на счёт описания типа аргументов в лямбдах? Вот пример, семантику спецом убрал. Что думаете о коде ниже? object.method((param0, param1) -> {
return param0.toString()
.append("\n")
.append(param1.toString());
});
А теперь? А теперь? object.method((Type param0, Type param1) -> {
return param0.toString()
.append("\n")
.append(param1.toString());
});
class Type {
private static int count = 0;
private int id = count++;
@Override
public String toString() {
return String.valueOf(id);
}
}
__________________
Homo homini penis est. Изменено Kalter (5.03 / 15:55) (всего 2 раза) |
17.12.2015 / 15:43 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Оставлю на память историю рефакторинга. 1 из 15 | Рефакторинг прав управления постом |
if ((($rights == 3 || $rights >= 6) && $rights >= $res['rights']) || (($res['user_id'] == $user_id && !$set_forum['upfp'] && ($start + $i) == $colmes && $res['time'] > $realtime - 900)AND !$type1['edit']) || (($res['user_id'] == $user_id && $set_forum['upfp'] && $start == 0 && $i == 1)AND !$type1['edit']) || (($type1['user_id']==$user_id && $i==1 && $start == 0) AND !$type1['edit'])) {
if((($rights == 3 || $rights >= 6) && $rights > $res['rights']) and $user_id != $res['user_id']) {
Первоначальный вариантif (
(($rights == 3 || $rights >= 6) && $rights >= $res['rights']) ||
(($res['user_id'] == $user_id && !$set_forum['upfp'] && ($start + $i) == $colmes && $res['time'] > $realtime - 900)AND !$type1['edit']) ||
(($res['user_id'] == $user_id && $set_forum['upfp'] && $start == 0 && $i == 1)AND !$type1['edit']) ||
(($type1['user_id']==$user_id && $i==1 && $start == 0) AND !$type1['edit'])
) {
if (
(($rights == 3 || $rights >= 6) && $rights > $res['rights']) &&
($user_id != $res['user_id'])
) {
Форматируемif (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($res['user_id'] == $user_id && !$set_forum['upfp'] && ($start + $i) == $colmes && $res['time'] > $realtime - 900)AND !$type1['edit']) ||
(($res['user_id'] == $user_id && $set_forum['upfp'] && $start == 0 && $i == 1)AND !$type1['edit']) ||
(($type1['user_id']==$user_id && $i==1 && $start == 0) AND !$type1['edit'])
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
($user_id != $res['user_id'])
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
Проверка, модератор ли текущий юзерif (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($is_post_by_current_user && !$set_forum['upfp'] && ($start + $i) == $colmes && $res['time'] > $realtime - 900)AND !$type1['edit']) ||
(($is_post_by_current_user && $set_forum['upfp'] && $start == 0 && $i == 1)AND !$type1['edit']) ||
(($type1['user_id']==$user_id && $i==1 && $start == 0) AND !$type1['edit'])
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
Проверка, написан ли пост текущим юзеромif (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($is_post_by_current_user && !$set_forum['upfp'] && $is_last_post && $res['time'] > $realtime - 900)AND !$type1['edit']) ||
(($is_post_by_current_user && $set_forum['upfp'] && $is_first_post)AND !$type1['edit']) ||
(($type1['user_id']==$user_id && $is_first_post) AND !$type1['edit'])
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
Первый/последний постif (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($is_post_by_current_user && !$set_forum['upfp'] && $is_last_post && $is_time_to_edit_post) AND !$type1['edit']) ||
(($is_post_by_current_user && $set_forum['upfp'] && $is_first_post)AND !$type1['edit']) ||
(($type1['user_id']==$user_id && $is_first_post) AND !$type1['edit'])
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
Время редактирования постаif (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($is_post_by_current_user && !$set_forum['upfp'] && $is_last_post && $is_time_to_edit_post) && !$is_topic_closed) ||
(($is_post_by_current_user && $set_forum['upfp'] && $is_first_post) && !$is_topic_closed) ||
(($type1['user_id']==$user_id && $is_first_post) && !$is_topic_closed)
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
Закрыта ли темаif (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($is_post_by_current_user && !$set_forum['upfp'] && $is_last_post && $is_time_to_edit_post) && !$is_topic_closed) ||
(($is_post_by_current_user && $set_forum['upfp'] && $is_first_post) && !$is_topic_closed) ||
(($is_topic_by_current_user && $is_first_post) && !$is_topic_closed)
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
$is_topic_by_current_user = ($type1['user_id'] == $user_id);
Является ли пользователь автором темыif (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($is_post_by_current_user && $is_ascending_sort && $is_last_post && $is_time_to_edit_post) && !$is_topic_closed) ||
(($is_post_by_current_user && $is_descending_sort && $is_first_post) && !$is_topic_closed) ||
(($is_topic_by_current_user && $is_first_post) && !$is_topic_closed)
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
$is_topic_by_current_user = ($type1['user_id'] == $user_id);
$is_ascending_sort = !$set_forum['upfp'];
$is_descending_sort = $set_forum['upfp'];
Новые темы вверху/внизуif (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($is_post_by_current_user && $is_last_post_in_all_sorting_modes && $is_time_to_edit_post) && !$is_topic_closed) ||
(($is_post_by_current_user && $is_last_post_in_all_sorting_modes) && !$is_topic_closed) ||
(($is_topic_by_current_user && $is_first_post) && !$is_topic_closed)
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
$is_topic_by_current_user = ($type1['user_id'] == $user_id);
$is_ascending_sort = !$set_forum['upfp'];
$is_descending_sort = $set_forum['upfp'];
$is_last_post_in_all_sorting_modes = ($is_ascending_sort && $is_last_post) || ($is_descending_sort && $is_first_post);
Последний пост вне зависимости от сортировки. Тут же видим повторяющееся условие, которое в обратной сортировке позволяло менять все свои посты.if (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($is_post_by_current_user && $is_last_post_in_all_sorting_modes && $is_time_to_edit_post) && !$is_topic_closed) ||
(($is_topic_by_current_user && $is_first_post) && !$is_topic_closed)
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
$is_topic_by_current_user = ($type1['user_id'] == $user_id);
$is_ascending_sort = !$set_forum['upfp'];
$is_descending_sort = $set_forum['upfp'];
$is_last_post_in_all_sorting_modes = ($is_ascending_sort && $is_last_post) || ($is_descending_sort && $is_first_post);
Убираем ненужное сравнение.if (
($is_current_user_moderator && $rights >= $res['rights']) ||
(($is_last_post_by_current_user && $is_time_to_edit_post) && !$is_topic_closed) ||
(($is_topic_by_current_user && $is_first_post) && !$is_topic_closed)
) {
if (
($is_current_user_moderator && $rights > $res['rights']) &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
$is_topic_by_current_user = ($type1['user_id'] == $user_id);
$is_ascending_sort = !$set_forum['upfp'];
$is_descending_sort = $set_forum['upfp'];
$is_last_post_in_all_sorting_modes = ($is_ascending_sort && $is_last_post) || ($is_descending_sort && $is_first_post);
$is_last_post_by_current_user = $is_post_by_current_user && $is_last_post_in_all_sorting_modes;
Последний пост текущего пользователяif (
$can_moderator_edit_post ||
(($is_last_post_by_current_user && $is_time_to_edit_post) && !$is_topic_closed) ||
(($is_topic_by_current_user && $is_first_post) && !$is_topic_closed)
) {
if (
$can_moderator_ban_user &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
$is_topic_by_current_user = ($type1['user_id'] == $user_id);
$is_ascending_sort = !$set_forum['upfp'];
$is_descending_sort = $set_forum['upfp'];
$is_last_post_in_all_sorting_modes = ($is_ascending_sort && $is_last_post) || ($is_descending_sort && $is_first_post);
$is_last_post_by_current_user = $is_post_by_current_user && $is_last_post_in_all_sorting_modes;
$can_moderator_edit_post = ($is_current_user_moderator && $rights >= $res['rights']);
$can_moderator_ban_user = ($is_current_user_moderator && $rights > $res['rights']);
Deal with moderatorsif (
$can_moderator_edit_post || $can_user_edit_his_last_post ||
(($is_topic_by_current_user && $is_first_post) && !$is_topic_closed)
) {
if (
$can_moderator_ban_user &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
$is_topic_by_current_user = ($type1['user_id'] == $user_id);
$is_ascending_sort = !$set_forum['upfp'];
$is_descending_sort = $set_forum['upfp'];
$is_last_post_in_all_sorting_modes = ($is_ascending_sort && $is_last_post) || ($is_descending_sort && $is_first_post);
$is_last_post_by_current_user = $is_post_by_current_user && $is_last_post_in_all_sorting_modes;
$can_moderator_edit_post = ($is_current_user_moderator && $rights >= $res['rights']);
$can_moderator_ban_user = ($is_current_user_moderator && $rights > $res['rights']);
$can_user_edit_his_last_post = (($is_last_post_by_current_user && $is_time_to_edit_post) && !$is_topic_closed);
Изменение последних постовif (
$can_moderator_edit_post || $can_user_edit_his_last_post || $can_topicstarter_edit_first_post
) {
if (
$can_moderator_ban_user &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
$is_topic_by_current_user = ($type1['user_id'] == $user_id);
$is_ascending_sort = !$set_forum['upfp'];
$is_descending_sort = $set_forum['upfp'];
$is_last_post_in_all_sorting_modes = ($is_ascending_sort && $is_last_post) || ($is_descending_sort && $is_first_post);
$is_last_post_by_current_user = $is_post_by_current_user && $is_last_post_in_all_sorting_modes;
$can_moderator_edit_post = ($is_current_user_moderator && $rights >= $res['rights']);
$can_moderator_ban_user = ($is_current_user_moderator && $rights > $res['rights']);
$can_user_edit_his_last_post = (($is_last_post_by_current_user && $is_time_to_edit_post) && !$is_topic_closed);
$can_topicstarter_edit_first_post = (($is_topic_by_current_user && $is_first_post) && !$is_topic_closed);
Изменение последних постов __________________
let live |
17.12.2015 / 16:45 | |
ВитаминКО Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| aNNiMON, запости на форуме JohnCMS Блин, а я даже в простой програмке на ОР метался между вариантом "всеводнустроку" и с расписыванием. В итоге, 50/50 Для сравнения До рефакторинга До рефакторинга if ((($rights == 3 || $rights >= 6) && $rights >= $res['rights']) || (($res['user_id'] == $user_id && !$set_forum['upfp'] && ($start + $i) == $colmes && $res['time'] > $realtime - 900)AND !$type1['edit']) || (($res['user_id'] == $user_id && $set_forum['upfp'] && $start == 0 && $i == 1)AND !$type1['edit']) || (($type1['user_id']==$user_id && $i==1 && $start == 0) AND !$type1['edit'])) {
if((($rights == 3 || $rights >= 6) && $rights > $res['rights']) and $user_id != $res['user_id']) {
После рефакторинга После рефакторинга if (
$can_moderator_edit_post || $can_user_edit_his_last_post || $can_topicstarter_edit_first_post
) {
if (
$can_moderator_ban_user &&
!$is_post_by_current_user
) {
$is_current_user_moderator = ($rights == 3 || $rights >= 6);
$is_post_by_current_user = ($res['user_id'] == $user_id);
$is_first_post = ($start == 0 && $i == 1);
$is_last_post = (($start + $i) == $colmes);
$is_time_to_edit_post = $res['time'] > $realtime - 15 * 60;
$is_topic_closed = $type1['edit'];
$is_topic_by_current_user = ($type1['user_id'] == $user_id);
$is_ascending_sort = !$set_forum['upfp'];
$is_descending_sort = $set_forum['upfp'];
$is_last_post_in_all_sorting_modes = ($is_ascending_sort && $is_last_post) || ($is_descending_sort && $is_first_post);
$is_last_post_by_current_user = $is_post_by_current_user && $is_last_post_in_all_sorting_modes;
$can_moderator_edit_post = ($is_current_user_moderator && $rights >= $res['rights']);
$can_moderator_ban_user = ($is_current_user_moderator && $rights > $res['rights']);
$can_user_edit_his_last_post = (($is_last_post_by_current_user && $is_time_to_edit_post) && !$is_topic_closed);
$can_topicstarter_edit_first_post = (($is_topic_by_current_user && $is_first_post) && !$is_topic_closed);
aNNiMON, а в отдельные классы еще ничего не выносили? Думаю, если так рефакторить, то много кода выходит __________________
わからない!! |
17.12.2015 / 17:16 | |
aRiGaTo Пользователь Сейчас: Offline
Имя: Snork Откуда: Yerevan Регистрация: 03.02.2010
| ВитаминКО, конечно выносим. И вот такие няшности делаем: <div class="punmenu">
<i class="item"></i><a href="/ablogs/">Авторские статьи</a>
{% if not User.is_guest %}
{% if Counters.ablogs_new %}
<span class="red"><a href="/ablogs/?act=new">+{{ Counters.ablogs_new }}</a></span>
{% endif %}
{% if Counters.ablogs_com_new %}
<span style="text-color: blue"><a href="/ablogs/?act=newcm">+{{ Counters.ablogs_com_new }}</a></span>
{% endif %}
{% if Counters.ablogs_mod %}
<span class="red"><a href="/ablogs/?act=mod">[{{ Counters.ablogs_mod }}]</a></span>
{% endif %}
{% endif %}
</div>
__________________
don't tread on me |
17.12.2015 / 17:21 | |
Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| aRiGaTo, про няшности — это сарказм?
|