- 1
- 2
if(!true) // это - не говнокод. это - заглушка.
return false;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+142
if(!true) // это - не говнокод. это - заглушка.
return false;
Оправдывается ещё )
+67
public final class SomeActivity extends Activity {
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = null;
if (id == DialogGenerator.SETTINGS_DIALOG) {
dialog = mDialogGenerator.createSettingsDialog();
} {
dialog = super.onCreateDialog(id);
}
return dialog;
}
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
if (id == DialogGenerator.SETTINGS_DIALOG) {
mDialogGenerator.prepareSettingsDialog((AlertDialog) dialog, someBoolValue, someObjectValue);
}
}
}
public final class DialogGenerator {
public Dialog createSettingsDialog() {
int dialogId = SETTINGS_DIALOG;
int titleId = R.string.settingsTitle;
String[] itemsArray = getStringArray(R.array.settings);
ThreeTypeOptionsAdapter adapter = new ThreeTypeOptionsAdapter(mControllerAsActivity, itemsArray,
mCheckableOptions, mTwoTextOptions);
AlertDialogCallback dialogCallback = new AlertDialogCallback(mControllerAsDialogHost, dialogId);
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mControllerAsActivity);
dialogBuilder.setTitle(titleId);
// костыль
dialogBuilder.setSingleChoiceItems(itemsArray, 0, null);
// конец костыля
dialogBuilder.setAdapter(adapter, dialogCallback);
AlertDialog dialog = dialogBuilder.create();
setMainListenersOnDialog(dialog);
dialog.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
return dialog;
}
public void prepareSettingsDialog(AlertDialog dialog, boolean someBoolValue, String someStringValue) {
//костыль
ListView dialogList = dialog.getListView();
dialogList.clearChoices();
dialogList.setItemChecked(POSITION_FOR_BOOL, someBoolValue);
//конец костыля
ThreeTypeOptionsAdapter adapter = (ThreeTypeOptionsAdapter) dialogList.getAdapter();
adapter.setAdditionalValue(POSITION_FOR_STRING, someStringValue);
}
}
Задача: показать диалог, внутри которого есть 3 типа ячеек: выделяемые с чекбоксом справа, невыделяемые с дополнительной надписью справа, обычные невыделяемые.
Примерно так:
Use GPS checkbox
Selected country Russia
Launch some activity
В комментах к методам я описал костыль:
Здравствуйте, дорогие друзья. Сегодня мы с вами поговорим об уникальном виде животных, которых открыли только в конце XX века. Это, дорогие друзья, Ява-обезьяны. Давайте дружно откроем сырцы Андроид-СДК, а именно - класс com.android.internal.app.AlertController .AlertParams - и метод createListView(AlertController). Видите, одна обезьяна решила, что нам будет удобней, если диалог автоматом задисмиссится, когда мы щёлкнем по элементу списка в CHOICE_MODE_NONE, и OnClickListener будет не null? А теперь давайте перейдём в android.app.AlertDialog.Builder. Видите, там другая обезьяна решила, что для multi-choice списка нам не потребуется хитроумный адаптер? Поэтому, дорогие друзья, когда мы поставили кастомный адаптер (setAdapter()) и сопроводили его слушателем, то какой бы мы choice mode не ставили после AlertDialog.Builder.create(), диалог дисмиссился. Поэтому, дорогие друзья, пришлось пойти на хитрость и вначале установить single choice (чтобы флаг mIsSingleChoice стал true), а потом уже ставить адаптер.
+16
#include <iostream>
using namespace std;
struct T{int a;T(){cout<<"T"<<this<<endl;}~T(){cout<<"~T"<<this<<endl;}};
struct D:public T{int b;D(){cout<<"D"<<this<<endl;}~D(){cout<<"~D"<<this<<endl;}};
int main() {
T* a = new D[2];
cout<<"mission failure"<<endl;
delete[] a;
return 0;
}
Писал тест специально для Тараса:
Виртуальный деструктор в базовых классах нужен:
*Для вызова деструкторов всех потомков. Иногда это не нужно, тк поля структуры тривиальны. Согласен с Тарасом.
*Для правильного выбора перегруженного оператора delete. Создал одним менеджером памяти, а удалил в другой - это плохо. Но также бывает редко и только в специфичных проектах.
Но вот то, что демонстрируется в этом примере - думаю чего-нибудь такого создатели той библиотеки, что ковырял Тарас, и опасались.
Не просто было вызван деструктор только для предков, забыв о деструкторах потомков, но и:
*Деструктор предков был вызван для this не по тем адресам, где расположены объекты.
Не удивлюсь, если:
*В некоторых кулхацкерских реализациях менеджеров памяти будет удален буфер меньшего размера и куча попортится или оставшаяся не удаленная часть массива в куче просто утекет.
http://liveworkspace.org/code/2X3MR0$8
−100
(lambda x:request.profile.role if request.profile.role!=5 else 4)(request.profile.role)
+140
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
int main()
{
do
{
int i,f,kol,z=1;
char s1[MAX],s2[MAX],*ch=" .!?",*s3[MAX];
fflush(stdin);
do{puts("Vvedite vash text.");
gets(s1);}while((s1[0]==' ')||(s1[1]=='\n')||(s1[0]=='\0'));
strcpy(s2,s1);
s3[0]=strtok(s2,ch);
for(i=1;s3[i]=strtok(NULL,ch);i++)
{
}
f=i;
puts("Otsortirovannue slova.");
for(i=0,kol=0;i<f;i++)
{
if((*(s3[i])=='A')||(*(s3[i])=='a'))
{
printf("%s ",s3[i]);
kol++;
z=0;
}
}
if(z)puts("slov nety. =(");
printf("\nKollichestvo slov na 'A' ili 'a': %d",kol);
puts("\nvash text.");
puts(s1);
printf("\n");
printf("dlya povtora nathmite lubyi klavishu. dlya vuhoda ESC.\n\n");
}
while(getch()!=27);
}
Моя первая работа) Оцените) Правда я не помню что она делает)
+132
#define LengthOfArrayInternal(a)(sizeof(a)/sizeof(a[0]))
#define is_array(x) _Generic((x), typeof((x)[0])[LengthOfArrayInternal(x)]:1, default: 0)
#define COMPILE_TIME_ASSERT(expr) char constraint[expr]
#define length_of_array(a) ({COMPILE_TIME_ASSERT(is_array(a)); LengthOfArrayInternal(a)})
Определение длины массива. gcc и с11 only.
Говно как известно рождается в споре:
http://govnokod.ru/12108#comment160631
+35
// стоит простая задача: удалить все узлы из списка
// чувак думает, как же ему это реализовать через задницу?
// и получилось же!
if (link * root = list.get_root()) {
link * next;
do {
next = root->next();
list.remove(next);
} while (root = next);
}
// неужели нельзя вот так, по-простому?
link * node = list.get_root();
while (node) {
link * next = node->next();
list.remove(node);
node = next;
}
+141
http://www.ubuntu.com/download/desktop
1. Открыть страницу в Firefox/Google-Chrome.
2. Сверху над кнопкой "Download" сменить с 32 бит на 64 бит.
3. Посмотреть внимательно на URL, откуда будет загружатся имидж.
Код, который это делает трудно понять без контекста.
+118
filename_size = strlen(dest_dir) + strlen(basename) + 6;
ctx.mtl_file = (char *) malloc(filename_size);
ctx.obj_file = (char *) malloc(filename_size);
sprintf(ctx.mtl_file, "%s/%s.mtl", dest_dir, basename);
Долго соображали, почему вылезает сегфолт во free...
+103
digits n = reverse $ map (`mod` 10) (takeWhile (/= 0) (iterate (`div` 10) n))
fromDigits l = sum $ zipWith (*) (reverse l) (map (10^) [0..])
isPalindromic x = digits x == (reverse $ digits x)
f :: Integer -> [[Integer]] -> [Integer] -> Int -> [[Integer]]
f x founded lookedup niter
| niter > 50 = [notlychers, [x] ++ lychers ++ lookedup, zs]
| nextX `elem` notlychers = [[x] ++ notlychers ++ lookedup, lychers, zs]
| nextX `elem` lychers = [notlychers, [x] ++ lychers ++ lookedup, zs]
| isPalindromic nextX = [[x] ++ notlychers ++ lookedup, lychers, zs]
| otherwise = f nextX founded (x : lookedup) (niter+1)
where nextX = x + fromDigits (reverse $ digits x)
notlychers = founded !! 0
lychers = founded !! 1
zs = founded !! 2
g :: [[Integer]] -> [[Integer]]
g founded = f (x-1) [xs, ys, [x-1]] [] 0
where x = zs !! 0
xs = founded !! 0
ys = founded !! 1
zs = founded !! 2
gg n = g [[],[],[n+1]]
isLycher n = null $ (gg n) !! 0
http://projecteuler.net/problem=55
http://projecteuler.net/thread=55
>i even haven't understood why it works :(