Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Простите что не предусмотрел вариант для вас 'Я горжусь свом плохим кодом', в следующий раз обязательно учту.
void sctp_generate_proto_unreach_event(unsigned long data)
{
struct sctp_transport *transport = (struct sctp_transport *) data;
struct sctp_association *asoc = transport->asoc;
sctp_bh_lock_sock(asoc->base.sk);
if (sock_owned_by_user(asoc->base.sk)) {
SCTP_DEBUG_PRINTK("%s:Sock is busy.\n", __func__);
/* Try again later. */
if (!mod_timer(&transport->proto_unreach_timer,
jiffies + (HZ/20)))
sctp_association_hold(asoc);
goto out_unlock;
}
/* Is this structure just waiting around for us to actually
* get destroyed?
*/
if (asoc->base.dead)
goto out_unlock;
sctp_do_sm(SCTP_EVENT_T_OTHER,
SCTP_ST_OTHER(SCTP_EVENT_ICMP_PROTO_UNREACH),
asoc->state, asoc->ep, asoc, transport, GFP_ATOMIC);
out_unlock:
sctp_bh_unlock_sock(asoc->base.sk);
sctp_association_put(asoc);
}
if (something)
{
// doWorkForSomething
goto end;
}
if (somethingAnother)
{
// doWorkForSomethingAnother
goto end
}
//doSomeWork
end:
// doEndWork
if (something)
{
// doWorkForSomething
goto end;
}
if (somethingAnother)
{
// doWorkForSomethingAnother
goto end
}
//doSomeWork
end:
// doEndWork
if (something)
{
// doWorkForSomething
}
else if (somethingAnother)
{
// doWorkForSomethingAnother
}
else
{
// doSomeWork
}
// doEndWork
void SctpGenerateProtoUnreachEvent(unsigned long data)
{
struct SctpTransport *transport = (struct SctpTransport *) data;
struct SctpAssociation *stcpAssociation = transport->Asociation;
SctpBhLockSock(stcpAssociation->Base.Sk);
if (SockOwnedByUser(stcpAssociation->Base.Sk))
{
SCTP_DEBUG_PRINTK("%s:Sock is busy.\n", __func__);
// Try again later.
if (! ModTimer(&transport->ProtoUnreachTimer, jiffies + someConst))
{
SctpAssociationHold(asoc);
}
}
else if (!(sctpAssociation->Base.Dead)) // Is this structure just waiting around for us to actually get destroyed?
{
auto sctpStOther = SCTP_ST_OTHER(SCTP_EVENT_ICMP_PROTO_UNREACH);
SctpDoSm(SCTP_EVENT_T_OTHER, sctpStOther, asoc, transport, GFP_ATOMIC);
}
SctpBhUnlockSock(stcpAssociation->Base.Sk);
SctpAssociation_put(stcpAssociation);
}
int Foo_bar(Foo *f)
{
auto status = MY_ERR;
auto b = Boo_new(&result);
auto m = Moo_new(&result);
auto fooBazStatus = Foo_baz(f, b, m);
if (fooBazStatus == MY_OK)
{
status = MY_OK;
}
Moo_free(m);
Boo_free(b);
return status;
}
bool success = true;
for(uint row = 0; row < matrix.RowsCount, row++)
{
success &= ProcessRow(matrix.Row[row]);
if (!success)
{
break;
}
}
return success;
private static bool ProcessMatrix(Matrix matrix)
{
var success = Enumerable.Range(0, matrix.RowsCount)
.AsParallel()
.WithDegreeOfParallelism(parallelismDegree)
.All(x => ProcessRow(matrix.Row[x]));
return success;
}
break и goto это одно и то же.
% grep goto kernel -rn | wc -l 84048
new Array() лучше использовать []. Через new Array(length) пишите только тогда, когда необходимо явно указать длину массива. Это бывает крайне редко ;) Зачем в _initHtml использовать clazz вместо this кое-где? Или используйте везде (для того, чтобы сократить объем сжатого кода) или не используйте вообще) name: function () { var clazz = this;
console.log(clazz.ALL_TAGS);
_setTags: function (tags) {
var all_tags = this.ALL_TAGS;
tags.each(function (t) {
if (t) {
// code
}
})
_setTags: function (tags) {
var all_tags = this.ALL_TAGS;
tags.each(function (t) {
if (t) {
// code
}
})
_setTags: function (tags) {
var all_tags = this.ALL_TAGS;
tags.each(function (t) {
if (!t) return;
// code
})
clazz.CHECKBOXES.append([{"tag": tag[0], "checkbox": checkbox}]);
clazz.FIELD_SET.adopt(wrap);
ROWS: new Array(),
CHECKBOXES: new Array(),
ALL_TAGS: new Array(),
RECORDS: new Array(),
RECUIRED_TAGS: new Array(),
RECUIRED_TAGS — правильно писать REQUIRED_TAGS.var missing = false;
clazz.RECUIRED_TAGS.each( function(t, i) {
if (r.tags.indexOf(t) === -1) {
missing = true;
}
});
if (missing) {
$(r.tr).addClass("hidden");
} else {
$(r.tr).removeClass("hidden");
}
some и contains:var missing = this.requiredTags.some(function () {
return !r.tags.contains(t);
})
if (missing) {
$(r.tr).addClass("hidden");
} else {
$(r.tr).removeClass("hidden");
}
var methodName = this.requiredTags.some(function () {
return !r.tags.contains(t);
}) ? 'addClass' : 'removeClass';
$(r.tr)[methodName]("hidden");
options — более в стиле JavaScript использовать camelCasevar methodName = this.requiredTags.some(function () {
return !r.tags.contains(t);
}) ? 'addClass' : 'removeClass';
$(r.tr)[methodName]("hidden");
// если свойства публичные
rows: [],
checkboxes: [],
allTags: [],
records: [],
requiredTags: [],
// если свойства приватные
_rows: [],
_checkboxes: [],
_allTags: [],
_records: [],
_requiredTags: [],
getRows: function () {
this.rows = this.element.getChildren("tbody tr");
}.protect(),
getCells: function (row, column) {
return row.getChildren("td:nth-child("+column+")");
}.protect(),
getRows на самом деле ничего не возвращает, как подобает настоящему геттеру, а устанавливает this.rows? options: {
// ..
wrapper_id: 'tbl_wrapper',
wrapper_class: 'tbl_c_wrapper',
form_id: 'tbl_form',
form_class: 'tbl_c_form',
fieldset_id: 'tbl_fieldset',
fieldset_class: 'tbl_c_fieldset',
legend_id: 'tbl_legend',
legend_class: 'tbl_c_legend',
checkbox_id: 'tbl_checkbox',
checkbox_class: 'tbl_c_checkbox',
chk_wrapper_id: 'tbl_chk_wrapper',
chk_wrapper_class: 'tbl_c_chk_wrapper'
}
options: {
// ..
wrapper : { 'id' : 'tbl_wrapper' , 'class' : 'tbl_c_wrapper' },
form : { 'id' : 'tbl_form' , 'class' : 'tbl_c_form' },
fieldset : { 'id' : 'tbl_fieldset' , 'class' : 'tbl_c_fieldset' },
legend : { 'id' : 'tbl_legend' , 'class' : 'tbl_c_legend' },
checkbox : { 'id' : 'tbl_checkbox' , 'class' : 'tbl_c_checkbox' },
chkWrapper : { 'id' : 'tbl_chk_wrapper', 'class' : 'tbl_c_chk_wrapper' }
}
_initHtmlinitHtml: function () {
this.wrapper = new Element('div' , this.options.wrapper);
this.form = new Element('form', this.options.form)
.set({
action: '',
events: {
'submit': function (e) { new Event(e).stop(); }
}
});
this.fieldSet = new Element('fieldset', this.options.fieldset)
.adopt(new Element('legend', clazz.options.legend).set({
'text': clazz.options.title,
}));
this.wrapper.adopt(this.form.adopt(this.fieldSet));
// this.options.container || document.body - не нужно, у нас и так по-умолчанию document.body
$(this.options.container).adopt(this.wrapper);
}.protect(),
Вам стыдно за плохой код написанный вами