การตั้งชื่อตัวแปล boolean

ปกติแล้วใน rails ชื่อ database column ที่เป็นตัวแปร boolean เค้าตั้งชื่อเป็น is_name หรือ name เฉยๆ

ลอง search ดูแล้วเจอทั้ง name เฉยๆ และแบบ is_name เลยไม่รู้ว่าจริงๆ เค้าใช้เกณอะไรในการตัดสิน

O’Reilly ->

create_table :employees do |t|
      t.column :name, :string
      t.column :hiredate, :date
      t.column :salary, :float 
      t.column :fulltime, :boolean
      t.column :vacationdays, :integer
      t.column :comments, :text
    end

Mysociety ->

   create_table "incoming_messages", :force => true do |t|
     t.integer  "info_request_id"
     t.text     "raw_data"
     t.datetime "created_at"
     t.datetime "updated_at"
     t.boolean  "user_classified",      :default => false
     t.boolean  "contains_information"
     t.boolean  "is_bounce",            :default => false
   end

ลองเขียนเทียบดูแบบนี้

# เทียบ
if msg.is_bounce ...
# กับ
if msg.bounce ...
# ผมว่า อันแรกอ่านง่ายกว่า
 
# ส่วน
if msg.user_classified
# กับ
if msg.is_user_classified
# มี is แล้วยาวไปหน่อย 

ตอนนี้ผมหันมาใช้ is_xxx เพราะเน้นอ่านรู้เรื่องไว้ก่อน แต่ผมชอบแบบ something.enable?

ในกรณีนี้ใช้ bounce? ไม่ได้? ดูเป็น ruby/scheme ดี :-P

เพราะว่ามันจะกลายเป็น column ในตาราง ไม่รู้ว่าใส่ ‘?’ ได้หรือเปล่า

สำหรับ mysql ถ้าใส่ backquote แล้วก็ได้นะครับ.

mysql> create table c(`b?` int);
Query OK, 0 rows affected (0.00 sec)
 
mysql> insert into c(`b?`) values(122);
Query OK, 1 row affected (0.03 sec)
 
mysql> insert into c(`b?`) values(123);
Query OK, 1 row affected (0.00 sec)
 
mysql> insert into c(`b?`) values(150);
Query OK, 1 row affected (0.00 sec)
 
mysql> select * from c;
+------+
| b?   |
+------+
|  122 | 
|  123 | 
|  150 | 
+------+
3 rows in set (0.01 sec)

ปกติผมก็เขียนไปเลย แต่ใน model บางครั้ง (คล้าย ๆ ที่ vee บอก) ผมจะไปเขียน accessor method ชื่อประมาณ bounce? เอาไว้ เวลาเขียนในโปรแกรมก็จะดูสวยงาม

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น