2010-04-14 3 views
1

Я не гуру JavaScript (пока). Я пытаюсь выяснить способ сократить количество строк ниже ... Есть ли какие-либо ярлыки для let say утверждения if?Уменьшить строки кода

function showDialog(divID) 
{ 
    var dialogDiv = $("#" + divID); 

    var height = 500; 
    var width = 400; 
    var resizable = false; 

    if (dialogDiv.attr("height") != "") 
    { 
     height = parseInt(dialogDiv.attr("minHeight")); 
    } 

    if (dialogDiv.attr("width") != "") 
    { 
     width = parseInt(dialogDiv.attr("minWidth")); 
    } 

    if (dialogDiv.attr("resizable") != "") 
    { 
     resizable = dialogDiv.attr("resizable"); 
    } 

    dialogDiv.dialog 
    (
     { 
      resizable: resizable, 
      width: width, 
      height: height, 
      bgiframe: true, 
      modal: true, 
      autoOpen: false, 
      show: 'blind' 
     } 
    ) 

    dialogDiv.dialog("open"); 
} 
+1

Вы можете переключиться на использование стиля One True Brace http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS – nickf

ответ

8

Вы можете сократить его немного вниз, как это:

function showDialog(divID) 
{ 
    var dialogDiv = $("#" + divID); 

    dialogDiv.dialog({ 
      resizable: dialogDiv.attr('resizable'), 
      width: dialogDiv.attr('width') || 400, 
      height: dialogDiv.attr('height') || 500, 
      bgiframe: true, 
      modal: true, 
      autoOpen: false, 
      show: 'blind' 
    }); 
    dialogDiv.dialog("open"); 
} 

Это имеет преимущество в том, Javascript слабо типизированных , на самом деле это своего рода злоупотребление чертой, но это работает.

Я до сих пор считаю это довольно удобочитаемым, но я привык к синтаксису, если вы не ... решаете, что читаемо, а что-то краткое и что для вас важнее, во многих случаях есть компромисс.

+0

Что делать, если ширина или высота равна 0? – Ponkadoodle

+0

@wallacoloo - это часть «злоупотребления» ответа, если 'width =" 0 "' является атрибутом или он не находит ширину, это будет '400' или' 500' соответственно ... вероятно, вам не нужно диалоговое окно ширины или ширины '0'. Также обратите внимание, что '.width()' и '.height()' всегда будут возвращать '0', если они скрыты, поэтому мы придерживаемся атрибутов здесь. –

+0

У jQuery есть .width() и .height() методы, которые немного чище, чем метод attr(). –

2

Вы могли бы использовать:

var x = first || default; 

делать инициализацию. Он в основном проверяет, является ли значение first правдоподобным и назначает его x, если оно есть, в противном случае назначить default на x. Пример из кода:

height = dialogDiv.attr('height') || 500; 

заменяет

if (dialogDiv.attr("height") != "") 
{ 
    height = parseInt(dialogDiv.attr("height")); 
} 
+0

, так что нет необходимости когда-либо проверять пустые строки в JavaScript? просто проверьте это как логическое в основном? – PositiveGuy

+0

, что зависит от ваших потребностей. если вы проверяете такие вещи, как высота или ширина, я бы обычно считал все эти значения: «null», «undefined», '' '', 'false',' "0" и '0' в большинстве случаев, как если бы он не существует. это может быть не так с вами (например, с 0s), поэтому вам могут потребоваться более строгие проверки. Пустая строка является фальшивым значением в Javascript. '(" "== false)' is 'true', однако' ("" === false) 'is' false' из-за добавленных проверок типов. – Anurag

1

Поскольку вы имеете только одно заявление, в каждом случае блок, вы можете избавиться от скобок, окружающих его, но это в основном эстетическим.

+0

круто, приятно знать ... не знал, что вы можете сделать это в JS так же, как и на многих других языках. – PositiveGuy

0

Вы имели в виду, что хотите использовать тройные операторы?

Совет: Сценарии написаны для человека, а не для машины. Более важно, чтобы ваш код был легко читаемым и понятным, чем предварительно оптимизированный, а затем вы забыли, что вы там написали.

В любом случае, вот один из способов сократить если заявления:

height = dialogDiv.attr("height") != "" ? parseInt(dialogDiv.attr("height")) : height; 
width = dialogDiv.attr("width") != "" ? parseInt(dialogDiv.attr("width")) : width; 
resizable = dialogDiv.attr("resizable") != "" ? parseInt(dialogDiv.attr("resizable")) : resizable; 
+0

Я думаю, что разработчики хорошо знают тройных операторов. Если это не так, тяжелая удача. Я делаю исключение для них, потому что многие языки используют их, и мы довольно широко используем их на C#. – PositiveGuy

+0

, так что в основном он имеет такой же синтаксис синтаксиса операторов, как выглядит C#. Там нет ничего плохого. Тернарные операторы рок. – PositiveGuy

2
var height = dialogDiv.attr("height") || 500; 
var width = dialogDiv.attr("width") || 400; 
var resizable = dialogDiv.attr("resizable") || false; 
0

Не делайте этого. Вы хотите, чтобы ваш код JavaScript был максимально читабельным и содержательным. Если вы пытаетесь быстро выполнить время загрузки и быстро сделать свой JavaScript, то что вы должны делать, это создать копию кода JavaScript minified ... не разрушая ваш исходный код JavaScript. Когда дело доходит до минимизации и оптимизации, Google Closure Compiler - лучший инструмент для работы. Чтобы узнать больше о Google Closure Tools (and Compiler Service) и Google Closure Library, см. Ссылки.

+0

Я не согласен, и я говорю, что в этом случае все в порядке, и разработчики должны сокращать строки для операторов if, когда это вообще возможно. Я просто не знал, как это сделать в JavaScript. Возьмите, например, C# и другие языки ООП. Да, JavaScript не является языком ООП, а концепцией ярлыка this || это то же самое, что у нас есть на C#, где вы можете сделать строку myString =! string.IsNullOrEmpty (someString)? someSring1: someString2; – PositiveGuy

+0

минимизация значительно уменьшит его ... Но в конечном итоге сокращение строк кода + минимизация окажет наибольшее влияние на уменьшение размера страницы. – PositiveGuy

+0

@ coffeeaddict, компилятор закрытия не просто минимизирует; он также выполняет статический анализ кода и создает более компактный и оптимизированный код. –

Смежные вопросы