LESS VS SASS

เมื่อเราได้รู้จักความสุดยอด LESS กันไปแล้ว (Part 1 และ Part 2) และบางคนอาจเคยได้ลอง SASS กันมาแล้วคงมีคำถามว่า ใช้ LESS หรือ SASS ดี
ซึ่งก็ค่อนข้างตอบยากเล็กน้อยเพราะ Featured พื้นฐานของทั้งคู่นี่ก็พอกันเลยครับ แต่ ยังไงก็ยังคงต่างครับ ลองชมกันเลย

ในบทความนี้เราจะเปรียบเทียบในด้านการใช้งานเท่านั้น ไม่นับด้านอื่นๆที่ไม่ค่อยเกี่ยวข้องเช่น SASS สร้างมาจาก Ruby, LESS สร้างมาจาก Javascript
หรืออะไรเล็กๆน้อยๆ อย่าง Document ก็จะไม่นำมาเปรียบเทียบนะครับ, ซึ่งจริงๆแล้ว LESS กับ SASS นี่โดยพื้นฐานแล้วแทบจะเหมือนกันจะหมดครับ
แต่จุดความแตกต่างนั้น ก็มีนัยสำคัญเลยละครับ

LESS แพ้ SASS

  • Mixin ของ LESS ไม่มีแบบ return ค่า (SASS มี)
  • LESS ไม่มี Selector Inheritance
  • ตัวแปรประเภท Numbers ของ LESS ยังคำนวณได้ไม่เท่า SASS
  • LESS ไม่มี Library ช่วย

1. Mixin ของ LESS ไม่มีแบบ return ค่า (SASS มี)

ตัวอย่างที่น่าปวดหัวคือ เราต้องการจะ convert px เป็น em
และนำค่าไปใช้ครับ จะต้องใช้วิธีการพักค่าแล้วค่อยใช้ครับ

// pixel to em
@base-size: 14px;
@tmp: 14px;
.pxtoem(@size) {
  @tmp: @size / @base-size;
}

.class {
  .pxtoem(24px);
  margin-top: @tmp;
}
//Output
.class {
  margin-top: 1.7142857142857142px;
}

2. LESS ไม่มี Selector Inheritance

อันนี้เป็นตัวอย่างของ SASS นะครับ

// SASS example
.bordered {
  border: 1px solid back;
}

#menu a {
  @extend .bordered;
}
.bordered, #menu a {
  border: 1px solid back;
}

3. ตัวแปรประเภท Numbers ของ LESS ยังคำนวณได้ไม่เท่า SASS

การคำนวณของ LESS ต้องใช้หน่วยเดียวกันเท่านั้นครับ แต่ SASS คำนวณหน่วยไม่เหมือนกันได้ครับ

// SASS
1cm * 1em => 1 cm * em
2in * 3in => 6 in * in
(1cm / 1em) * 4em => 4cm
2in + 3cm + 2pc => 3.514in
3in / 2in => 1.5
// LESS
1cm * 1em => Error
2in * 3in => 6in
(1cm / 1em) * 4em => Error
2in + 3cm + 2pc => Error
3in / 2in => 1.5in

4. LESS ไม่มี Library ช่วย

LESS ไม่มี แต่ SASS มีและดีมากๆ ยกตัวอย่างถ้าเราจะใช้ border-radius เราก็ต้องสร้าง mixin ขึ้นมาประมาณนี้

// LESS
.border-radius(@values) {
  -webkit-border-radius: @values;
     -moz-border-radius: @values;
          border-radius: @values;
}

div {
  .border-radius(10px);
}

แต่ SASS จะมี Library ช่วยครับ เช่น Compass ซึ่งมี mixin ช่วยตั้งแต่พื้นฐาน
อย่างพวกที่ใช้ prefix ต่างๆเช่น border-radius, box-shadow จนถึงขนาด generate sprite

LESS ชนะ SASS

ใจเย็นๆครับที่ดูเหมือนว่า เจ้า LESS นี่สู้ไม่ได้เลย, LESS เองนั้นก็มีจุดที่ SASS สู้ไม่ได้เหมือนกัน

  • LESS ใช้ร่วมกับ Javascript ได้
  • Speed
  • Live Editor
  • Namespace

1. LESS ใช้ร่วมกับ Javascript ได้

นี่คือจุดแข็งเลยเพราะว่าจริงๆแล้ว LESS มันก็มาจาก Javascript
อยู่แล้วดังนั้นมันเลยใช้ function ของ Javascript ได้ด้วยครับ

// You can also use the previously mentioned interpolation:
@str: "howdy";

// @str becomes 'HOWDY'
@str-before: `"happy".toUpperCase()`; 

// becomes 'HOWDY'
@str-after: ~`'@{str}'.toUpperCase()`;

// Here we access part of the document
@height: `document.body.clientHeight`;

.class {
  height: @height;
}

.class:before {
  content:  @str-before;
}

.class:after {
  content:  @str-after;
}
// Output
.class {
  height: 1332;
}
.class:before {
  content: "HAPPY";
}
.class:after {
  content: "HOWDY";
}

2. Speed

สรุปเลยครับ LESS ไวกว่า SASS เยอะครับ

ความเร็วเอาไปทำไม ?

ดูได้ที่ section ต่อไปเลยครับ `Live Editor`

3. Live Editor

จริงๆแล้ว LESS จะมี less.js ซึ่งตัวนี้ก็เกือบเหมือน Live editor อยู่แล้วแต่มันทำอะไรกับ HTML ไม่ได้ก็เลยไม่ได้เป็น Live Editor เต็มตัว
ซึ่งส่วนนี้จริงๆอ้างอิง section ที่แล้ว เรื่อง Speed ครับ, ถ้าเราใช้ Automate Tasking อย่าง Grunt หรือ Gulp.js – LESS จะ=ช่วยทำให้
กลายเป็น Live Editor ได้จริงๆเลยครับ (สวรรค์ของ Frontend Developer เลยทีเดียว)

Automate Tasking เป็น Tool ที่ช่่วยในการทำ task ของเราเช่น เวลาเราทำ Frontend ก็มี process ประมาณนี้
เขียน LESS >> compile LESS >> กด F5 เพื่อ Refresh Browser แต่ถ้าเราใช้ Automate Tasking
ตัว Automate Tasking ก็จะทำงานให้อัตโนมัติทุกอย่างเลย เวลาเรากด save ไฟล์
ส่วนตัวใช้ LESS ก็เพราะทำ live editor เนี่ยแหละ

4. Namespace

LESS ชนะไป เพราะ SASS ไม่มี

สรุป

ข้อดีของ LESS ที่เหนือกว่า SASS คือ

  • LESS ใช้ร่วมกับ Javascript ได้
  • Speed
  • Live Editor
  • Namespace

ข้อ 1 นั้น ส่วนตัวผมยังไม่ค่อยเห็นตัวอย่างที่มีประโยชน์ในการใช้งานสักเท่าไรครับ
นึกภาพไม่ออกเลยว่านำไปใช้อะไรได้บ้าง เพราะปกติเราก็กำหนดค่าเข้าไปกันเองอยู่แล้ว
ข้อ 4 นี่พอใช้ได้, ส่วนข้อ 2 กับ 3 นี่ เกี่ยวข้องกันชัดเจน

สรุปโดยความเห็นส่วนตัวของผมในทางประโยชน์การใช้งาน SASS ชนะครับ ยกเว้นอยากจะใช้
Live Editor ในปัจจุบันครับ (ผมทดสอบใน Notebook – SASS จะกินเวลาทั้งหมด Process เกือบๆ 1 วินาที)

ในอนาคตผมคิดว่า Computer จะเร็วขึ้นจนสามารถ Compile SASS ได้เร็วขึ้น จนสามารถใช้เป็น Live Editor ได้เหมือนกับ LESS
ผมจึงแนะนำ SASS มากกว่าถึงแม้ปัจจุบันผมจะใช้ LESS ในการทำ Live Editor คู่กับ Gulp.js ก็ตาม
ใครที่อยากเล่น SASS แนะนำให้ใช้ command ruby ในการ รัน เพราะเร็ว แถมสามารถใช้กับ Compass ได้ (ต้องลงเพิ่ม)
การทำงานก็รวดเร็ว สะดวกกว่าใช้พวกโปรแกรมเยอะ (ไว้โอกาสหน้าจะเขียนบทความเกี่ยวกับ SASS ให้นะครับ)