ขอบเขตของตัวแปรในภาษา C++ (Scope of variables In C++)

ตัวแปรทั้งหมดที่เราทำการประกาศค่าไว้ก่อนแล้ว นั้นในภาษา C++ การประกาศค่าตัวแปรจะทำที่ใดของ source code ก็ได้ และระหว่างการประกาศตัวแปรนั้น แต่ละขอบเขตของฟังค์ชัน ( Scope of Function ) นั้นถึงแม้จะชื่อเหมือนกัน แต่ว่าก็ไม่ได้หมายความว่าจะเป็นตัวแปรจะค่าเหมือนกันแต่อย่างใด ซึ่ง ตัวแปร A ที่อยู่ใน ฟังค์ชัน X จะไม่เท่ากับค่าของตัวแปร A ที่อยู่ในฟังค์ชัน Y แต่อย่างใด เพราะว่าอยู่กันคนละขอบเขตกันเราเรียกตัวแปรในขอบเขตแบบนี้ว่า ตัวแปรเฉพาะที่ (ในบทความนี้ขอพูดทับศัพท์ไปเลย เพื่อให้เข้าใจง่ายว่า Local Variables) ซึ่งจะมีค่าและสามารถใช้งานได้เฉพาะฟังค์ชัน ที่มันเกิดร่วมด้วยเท่านั้น


ตัวอย่าง 1

int X () {

   int A = 5;

   return A;

}

int Y () {

   int A = 10;

   return A;

}

int main() {

   std::cout < < X()<< ”;

   std::cout << Y()<< ”;

   return 0;

}


ผล

5 10


ในบางครั้งการเขียนโปรแกรมแบบประกาศตัวแปรภายนอกฟังค์ชัน ไม่ว่าจะที่ใดก็ตาม มันจะเป็น ตัวแปรสากล (ในบทความนี้ขอพูดทับศัพท์ไปเลย เพื่อให้เข้าใจง่ายว่า Global Variables) ไปทันที ซึ่งจะทำให้การประกาศแบบ ตัวแปร A มีค่าค่าหนึ่งในฟังค์ชัน X และตัวแปร A มีค่าอีกค่าหนึ่งในฟังค์ชัน Y จะทำแบบนี้ไม่ได้ เพราะว่าถูกการประกาศไว้แล้ว ภายนอกฟังค์ชัน ในภายนอกฟังค์ชันนั้นเอง ทำให้การที่ใช้ตัวแปรนั้นๆ ที่ประกาศไว้นอกฟังค์ชันไปใช้อาจทำให้เกิดการคำนวณหรือการทำงานที่ผิดพลาดได้


ตัวอย่าง 2

int x = 5; // Global Variable

int main() {

   double y = 3.1415; // Local Variable

   std::cout < < y << ”; std::cout << x << ”; return 0;

}


ผล

3.1415 5


แต่ ……

มันยังมีข้อที่เรามองข้ามไปคือ ถ้าเราประกาศตัวแปร เหมือนกับ Global Variable แล้วนั้น จะทำให้ตัว Compiler มองว่าตัวที่ประกาศอยู่ในฟังค์ชันคือตัวแปรที่มีความสำคัญหรือ ศักดิ์มากกว่า


ตัวอย่าง 3

int x = 5;

int main() {

   double x = 3.1415; /* ทำการซ่อน Global Variable x = 5 ไว้ */

   std::cout < < x << ”; /* แสดงตัวค่าตัวแปร Local Variable แทน */

   std::cout << ::x << ”;

   /* ใช้ Scope resolution operator มาวางให้ข้างหน้าตัวแปร

   เพื่อบ่งบอกว่าเราต้องการใช้ตัวแปร Globale Variable

   แทน Local Variable*/

   return 0;

}


ผล

3.1415 5


จากตัวอย่างจะเห็นว่าเราจะทำการประกาศตัวแปรทับซ้อนกันก็ได้ได้แต่ว่าไม่เป็นผลดีและอาจเกิดการสับสนใจการใช้งานได้ ทำให้ส่วนใหญ่แล้วจะใช้ Local Variable กันเยอะมาก เพราะว่าจัดการได้ง่าย แต่ก็มีในหลายๆ กรณีเช่นกันที่ต้องใช้ อย่างเช่นตัวแปรที่ต้องการแชร์ค่าเริ่มต้นการทำงานเช่นค่าของ Percen (100) หรือ ค่าของ Pi (3.1415) เป็นต้น เพราะเป็นค่าที่ไม่มีการเปลี่ยนแปลงไม่ว่ากรณีใดๆ

Note !

คุณสามารถที่จะบอก Compiler ว่าคุณต้องการใช้ Global Variables แทนการใช้ Local Variable ได้เมื่อคุณตั้งชื่อ Variable ภายใน Function นั้นเหมือนกับ Global Variable โดยใช้ :: (The Scope Resolution Operator) ไว้ด้านหน้าตัวแปรนั้นๆ …

:: identifier

class-name :: identifier

namespace :: identifier

ซึ่งการอ้างถึงของ :: (The Scope Resolution Operator) นั้นสามารถอ้างได้ตั้งแต่ variable, class และnamespace ได้ด้วย

ซึ่งจาก "ตัวอย่างที่ 3" ถ้าคุณมี Nested Local Scopes (มี Scope ตัวแปรซ้ำซ้อนกับ Global Variable ) ตัว Compiler จะไปเอาค่าหรืออ้างอิงตัวแปรที่อยู่ใน Function ก่อนเสมอ ถ้าจะใช้ Global Variable ก็เพียงทำหลักการของ The Scope Resolution Operator นั้นเอง

จากที่เราได้รู้แล้วว่า คำว่า Global Variables นั้นสามารถที่จะอ้างอิงได้จากทุกๆ ที่ใน code หรือใน ฟังค์ชัน ซึ่งจะคงอยู่ตลอดหลังจากการตั้งตัวแปรนั้นๆ ขึ้นมาใช้งานแล้ว แต่คำว่าตัวแปรเฉพาะที่ Local Variables นั้นตัวแปรจะถูกจำกัดอยู่ในขอบเขตที่ตัวเองได้เกิดขึ้น แต่ถ้าคุณสร้างมันในตอนแรกของฟังค์ชัน (ในที่นี่หมายถึง main ฟังค์ชันของ C++) ตัวแปรนั้นๆ จะอยู่ใน main ฟังค์ชันเท่านั้น และจะไม่ไปยุ่งกับตัวแปรอื่นๆ ในฟังค์ชันอื่นๆ ด้วยถึงแม้ชื่อจะเหมือนกันในฟังค์ชันอื่นๆ ก็ตามที

ใน C++ นั้น ขอบเขต ของ Local Variables นั้นจะอยู่ที่ ( brackets { } signs ) นั้นเอง ซึ่งถ้าคุณตั้งมันในขอบเขตดังกล่าวแล้ว ตัวแปรจะไม่ยุ่งเกี่ยวกับภายนอกฟังค์ชันแน่นอน


ตัวอย่าง 4

int main(){

   for (int i = 0; i < 100; ++i) {

      int x = 42;

      if (x < i) {

         double x = 3.14; std::cout << x; // Output ที่จะ Print ออกมาจากหน้าจอคือ 3.14

      }

      std::cout << x; // Output ที่จะ Print ออกมาจากหน้าจอคือ 42

      } // ส่วนนี้จะ Error เพราะว่าเราไม่ได้ตั้งตัวแปรไว้ในขอบเขตนี้ ด้วยเหตุผลได้กล่าวไปแล้วในข้างต้น

   std::cout << x;

   return 0;

}


จากเนื่อหาด้านบนคงทำให้หลายๆ คนเห็นภาพมากขึ้นในเรื่องของขอบเขตของตัวแปรในภาษา C++ นะครับ

อ้างอิงจากหนังสือ C++ in a Nutshell ของ O’Reilly


 

เรียนโปรแกรมมิ่ง หรือ Computer Science จงเป็นเจ้านายภาษา …

ขอท้าวความนิดนึง ว่าทำไมผมถึงเขียนแบบนี้

คืออันนี้ผมไป ได้มาจากพี่เดฟ (ithilien_rp) post ตอบไว้ใน pantip.com โดยที่เจ้าของกระทู้เขียนว่า ในlonghorn นั้น microsoft จะใช้ภาษาใหม่ ซึ่งก็คือ mc++ ดังนั้นขอให้พวกโปรแกรมเมอร์ทั้งหลายระงับการเรียนโปรแกรมกันไว้ก่อนเพราะว่าอีกไม่นานต้องเปลี่ยนอีก

อะไรทำนองนี้แหละครับ เนื้อหาบทความีดังนี้ครับ


         การเรียนรู้ platform/library/language ใหม่ๆ เป็นเรื่องปกติของ programmer อยู่แล้ว ดังนั้นผมว่ามีของใหม่มา ก็ไม่ใช่เรื่องแปลกอะไร

         การเรียนรู้อะไรผมไม่อยากให้ดูที่เปลือกนอกมากไปนักน่ะครับ อย่าไปดูที่ syntax, libraryอะไรให้มากนัก ดูที่แนวความคิด หรือว่าปรัชญาของการเขียนโปรแกรมจะดีกว่ารวมไปถึง algorithm flow หรือว่า program design ด้วย เพราะว่า ถึงแม้ภาษาต่างๆ มันจะเปลี่ยนไป หรือว่า library/framework ต่างๆ มันเปลี่ยนไปตามกาลเวลาของมัน ไอ้พวก algorithm หรือว่า design philosophyพวกนี้ไม่ค่อยเปลี่ยนตามหรอกครับ หรือว่าเปลี่ยนตามก็ช้ากว่าไม่รู้กี่เท่า

         เรียนprogramming language ใหม่ๆ ภาษานึงนี่ ผมว่ามันไม่ใช่เรื่อง big dealอะไรเลย ตอนที่ผมเปลี่ยนมาใช้ mac os x ใหม่ๆ แล้วอยากจะเขียนโปรแกรมบน osx ผมก็ต้องเรียน objective-c ซึ่งผมไม่เคยเห็นมาก่อนในชีวิตก็ไม่มีอะไรมาก ใช้เวลาครึ่งวันอ่าน syntax, keyword ใหม่ๆ ว่ามีอะไรบ้างอีกครึ่งวันหาพวก FAQ ว่ามันมีอะไรต่างจาก c/c++/java มั่งวันที่สองวันที่สาม ก็เขียนอะไรใน objective-c ได้แล้วส่วนเรื่องการเขียนโปรแกรมใน os x นี่ แน่นอนว่า architecture มันต่างจากwindows โดยสิ้นเชิง ดังนั้นความรู้อะไรก็ตามที่ผมรู้มาจาก win32, mfc,.net ใช้ไม่ได้เลย (ของตาย ยกเว้น M$ จะ port ไปลง แต่ว่า .net ก็มีdotGNU ก็พอจะใช้กันได้บ้าง) แต่ว่าก็เรียนรู้ Cocoa framework (ที่เป็นnative framework ของ mac os x) ก็ใช้เวลาไม่นานเท่าไหร่ ก็เขียน GUIapplication ได้แล้ว ใช้ system service ได้พอสมควร (ก็อ่านๆ พวก basicแล้วที่เหลือก็เปิด reference เอา)

         ขอสรุปความคิดคร่าวๆละกันนะครับ ก่อนจะนอกเรื่องไปมากกว่านี้ผมอยากจะเสนอความคิดแบบนี้ดีกว่าครับ สำหรับคนที่จะหัดเขียนโปรแกรม

1. แยกการเรียน “ภาษา” กับการเรียน “library/framework” ออกจากกัน
         เดี๋ยวนี้library/framework ใหม่ๆ ส่วนมากจะ support หลายภาษา และ codeที่เขียนเรียกใช้ library เหล่านั้นในแต่ละภาษาจะไม่ต่างกันมากเท่าไหร่(ลองดู code ที่ใช้ .NET framework ที่เขียนใน VB.NET, C#.NET หรือว่าManaged C++.NET สิครับ ออกมาแทบจะเหมือนกันเลย ผมอ่านหนังสือ VB.NET นี่แปลง code เป็น C# ได้แบบแทบไม่ต้องคิดเลย เกือบจะบรรทัดต่อบรรทัด แปลงแค่syntax กับ keyword แล้วก็ structure นิดหน่อย)
         ดังนั้นการแยกการเรียนรู้ library/framework ออกจากการเรียนภาษาเป็นเรื่องที่สำคัญครับ ตามความคิดของผม

2. อย่าไป focus กับภาษามากเกินไป ดูที่ algorithm + program design มากๆ
         ภาษาก็เป็นแค่เครื่องมือแม้ว่าภาษาแต่ละภาษาจะมีข้อดีข้อเสียไม่เหมือนกัน แต่ว่าอย่างไรก็ดี การdesign program นั้น design framework, design patternsส่วนมากจะไม่ขึ้นกับภาษา คือ จะใช้ในภาษาไหนก็ได้ เช่นเดียวกับ algorithm
         ดังนั้นเมื่อต้องถึงเวลาที่จะเปลี่ยน platform ไม่ว่าจะเป็นการไปใช้ platformตระกูลใหม่ (เช่น windows->linux, windows->macหรือว่ากลับกันก็ตาม) หรือว่าตระกูลเดิม แต่ update architectureใหม่จนจำไม่ได้ (เช่น windows 3.11->windows 95, win32->.net หรือmac os 9->mac os x) ก็ตาม สิ่งที่ต้องทำก็คือ
         – เรียนรู้ syntax และลักษณะเฉพาะของภาษาใหม่ (ถ้าจำเป็น)
         – เรียนรู้ basic ของ framework ของ platform นั้นๆ (เช่น การเรียกใช้component, การใช้ memory, ฯลฯ)
         จากนั้นในการเขียนโปรแกรมหรือว่าสร้าง application อะไร ในภาพรวม ก็คิดตามหลักprogram design เดิม และใช้ algorithm ตัวเดิม แต่ว่าเรียกใช้ componentจาก framework ตัวใหม่ (ซึ่งตรงนี้ ถ้า basic แน่นดี ก็เปิดดูจากreference ได้เลย) และอาจจะปัญหาเรื่องรายละเอียดปลีกย่อยนิดหน่อยในส่วนที่เป็นลักษณะเฉพาะของภาษาใหม่ ที่ต่างไปจากภาษาที่เคยชินเท่านั้นเอง เช่นตอนที่เขียน objective-c ใหม่ๆ งงกับมันอยู่พักนึง กับsemi-automatic memory management ของมัน เพราะว่าเคยแต่ใช้ manual แบบc/c++ หรือว่า fully automatic แบบ java
         ส่วนถ้าใครอยากจะลองเล่นกับmanaged c++ ก็หาตัวอย่างได้ทั่วไปครับ ส่วนหนังสือเล่มที่อยากจะแนะนำนอกจากหนังสือของสำนักพิมพ์ microsoft ที่น่าจะเป็นมาตรฐานที่ต้องอ่านแล้วก็มี Developing Applications with Visual Studio.NET โดย RicardGrimes เล่มนี้จะเน้นการใช้ Managed C++และจากพูดถึงส่วนของรายละเอียดต่างๆ ข้อเหมือนและข้อแตกต่างระหว่างmanaged c++ กับ c++และ c# ไว้ดีพอสมควรทีเดียว แต่ว่าอาจจะไม่มี codeตัวอย่างมากนัก เหมาะกับคนที่เขียนโปรแกรมเป็นอยู่แล้ว

 

อย่ามองคนใช้ Computer Notebook แบบนี้เลย

มันน่าแปลกนะ เดี่ยวนี้ใครๆ ก็มองหา Computer Notebook มาใช้งานกันอย่างถ้วนหน้า แต่ก็มีคนกลุ่มหนึ่งที่ยังคงดูถูก หรือมองคนใช้ Computer Notebook ว่าเป็นพวก Hi-So หรือพวกอวดความรวย และซื้อมาเพื่อความเท่

ผมในฐานะคนใช้คนหนึ่งซึ่งใช้มาแล้ว 2 เครื่อง 2 ยี่ห้อ ในเวลาเกือบ 3 ปี บอกได้เลยว่ามันไม่ใช่อย่างที่หลายๆ คนคิดอย่างผมซื้อเพราะว่าเอามาทำงานซะมาก งานในที่นี้คือการทำงานจริงๆ ได้เม็ดเงิน ได้ผลตอบแทนจริงๆ อีกทั้งสะดวกมากๆ ทั้งเรื่องงาน เรื่องเรียนมากมาย แต่ก็อีกหล่ะ มีหลายๆ คนที่ซื้อมาเพราะโก้ ถือไปมันเท่….. อืมมม น่าคิดนะ

แต่วันนี้ขอบ่นเฉพาะพวกชอบมองว่าคนใช้ Computer Notebook ดีกว่าซึ่งผมก็ไม่เข้าใจว่าจะดูถูก หรือมองคนใช้ Computer Notebook อะไรขนาดนั้น คือจริงๆ การใช้นั้นในมุมมองผม มันอยู่ที่งานที่เค้าทำ หรือว่าเค้าใช้งานมากกว่า รวมถึงข้อจำกัดแต่ละคนด้วย

แต่ก่อนจะพูดนั้น ต้องบอกก่อนว่า ไอ้พวกใช้ Computer Notebook แล้วจะเอามาเล่นเกมส์ แนะนำว่าให้ไปซื้อ Computer Desktop ดีกว่า มันได้อะไรมากกว่าในราคาที่เท่ากันมากเลย ซึ่งต้องขอยกตัวอย่างว่า ผมทำงานที่ตึกเรียนเนี่ย แล้วมาทำงานต่อที่หอ หรือผมกลับบ้านที่นครสวรรค์ (ผมเรียน ม.นเรศวร ที่พิษณุโลก) ผมไม่ต้องแบก Computer Desktop กลับไปกลับมาทำไม ผมไปไหนผมก็ทำงานได้ เขียนโปรแกรม อ่าน eBook หรือ เช็คเมลได้ (ตอนนี้มือถือ GPRS เสียเลยไม่ได้ใช้แต่รอซื้อมือถือใหม่ก่อน) ผมมองว่าชี้วิตที่มันได้ทำงานไปด้วย Relax ไปด้วยมันสุดยอดมาก การทำงานไม่ใช่อยู่ที่ห้องทำงาน แต่อยู่ที่ว่าคุณจะทำงานให้ออกมาอย่างไร และใส่ไอเดียในงานได้อย่างไร ให้มันมีประสิทธิภาพได้มากที่สุด ผมชอบสไตร์นี้มากกว่า

ซึ่งคนอื่นๆ อาจจะไม่คิดแบบผม ซึ่งในความคิดผม การมี Computer Notebook มันไม่ได้เท่อะไรเลย แถม…… แบกไปๆ มาๆ หนักอีกต่างหาก อีกอย่างกระเป๋าใบใหม่ของผม Targus Sport Deluxe Computer Backpack ที่สุดแสนจะใหญ่โตเท่าบ้าน(ของหมาตัวเล็กๆ) แต่เต็มไปด้วยความปลอดภัยต่อ Computer Notebook แล้วเนี่ยมันก็คงน่าคุ้มดีอยู่นะ แล้วอีกอย่างคือมันต้องแบกสายไฟ อีกจำนวนหนึ่งไปด้วยเช่น IBM Power Outlet, MS IntelliMouse Optical, Line phone, Line LAN, ฯลฯ อีกเล็กน้อย นี่ยังไม่รวมพวกเอกสารอีกจำนวนหนึ่ง และหนังสือเรียน หรือเอากลับบ้านไปทำงานที่บ้านอีก รวมๆ น้ำหนักกันแล้วก็เกือบๆ 6 – 7 กิโลกรัมที่มันอยู่ที่หลังของเรา

ในกระเป๋า Backpack สุดเท่ (ไปหมด ตรูหนักโว้ยยยยยย) ….. ซึ่งผมว่าผมเดินทางตัวเปล่าๆ เท่กว่าอีกนะผมว่า อีกอย่างคือที่ที่ผมอยู่ หอ นั้หล่ะ ก็ไม่ใหญ่มา โต๊ะหนังสือห้องอะไรมันก็เล็ก มันไม่มีห้องทำงานแบบที่บ้านผม ที่ใส่ Computer Desktop + Printer + Scanner + โต๊ะทำงานขนาดใหญ่ ซึ่งทั้งหมดมันกินพื้นที่กว่าครึ่งห้องของห้องทำงานไปแล้ว (ผมใช้ห้องทำงานเปลื้องมาก) ……
ซึ่งเครื่อง Computer Desktop ที่อยู่ที่บ้านในตอนนี้กลายเป็นเครื่อง Backup Files ต่างๆ ของ Computer Notebook ของผมไปซะแล้ว และเอาไว้ลองของพวกโปรแกรมใหม่ๆ หรือว่าพวกโปรแกรม demo ต่างๆ เพราะว่าไม่ได้ใช้งานมากไปกว่าเอามาเปิดเพลง หรือไว้ทำระบบ Server ต่างๆกลายเป็นที่ลองวิชาไปซะแล้ว ซึ่งเครื่องตัวนี้คือ P3 667Mhz Ram 512 H/D40GB ก็ไม่ถึงกับเร็วมากในปัจจุบัน แต่ว่ามัน run Windows XP ได้อย่างสบาย ทำงานได้ทุกอย่างที่ควรจะทำได้

ซึ่งผมคิดว่ามันคงรับใช้ผมไปได้อีกนาน สักอีก 2 – 3 ปี เอาไว้ลองเอาไว้เล่น หรือเอาไว้ให้ แม่ ผมหรือน้องผมทำงาน + เล่นเกมส์ ซึ่งในตอนนี้ทำให้ผมทำงานบน Notebook ผมมากกว่าเครื่องทุกเครื่องที่ผมมีมาซะอีก ซึ่ง IBM ThinkPad นั้นไม่เคยงอแง เลย รวมทั้ง การ Support On-Site ของ IBM ที่สุดยอดมาก …… ผมยอมรับเลย และจะขอใช้ยี่ห้อนี้ต่อไปถ้ายังไม่เปลี่ยนการ Support ไปเป็นแบบ Carry-In ซะก่อน อีกทั้งการ Support ด้าน Warranty และการตอบคำถามด้าน Technic ทีดีเยี่ยมขอชมเลย เพราะใช้บริการหลายครั้งทั้ง เรื่องการติดขัดทางด้าน Wireless และ อุปกรณ์ modem เสีย ด้วย

มาเข้าเรื่องต่อดีกว่า คือในความเป็นจริงแล้ว คนที่จะซื้อมาใช้ในปัจจุบันน่าจะแบ่งได้ 3 กลุ่มคือ 1. กลุ่มgเน้นทำงานจริงๆ เป็นหลัก เน้นโดยเฉพาะ อันนี้กลุ่มนนี้มีมานานแล้ว …. และก็ยังคงมีต่อไป ซึ่งส่วนใหญ่จะมีเงินพอในการเข้าถึงเทคโนโลยีด้านนี้มากกว่า และเข้าใจว่าควรซื้อ หรือไม่ซื้อะไรบ้างในตอนนั้น (วัยทำงานน่ะ ยังไงก็เข้าใจการใช้เงินได้ดีกว่าวัยรุ่นอยางผมหล่ะ) 2. กลุ่มเน้นความบันเทิง อันนี้เป็นกลุ่มใหม่ที่เพิ่งเกิดมาได้สักพักพวกนี้จะเน้นทุกอย่างที่สร้างความบันเทิงได้ คือกลุ่มนี้ไม่ขอวิจารน์มากนะ (เดี่ยวโดนด่าว่าไปยุ่งกับกระเป๋าตังเค้า) เพราะว่ามันเงินเค้า แต่ว่ากลุ่มนี้ส่วนมากจะเป็นพวกเข้าใจผิดว่า notebook คือ desktop แบบพกพาได้ซึ่งในความจริงแล้วมันต่างกัน และมักเข้าใจว่ามัน upgrade กันได้ง่ายๆ ใช้งานไม่ถนอมก็เยอะซึ่งทำให้กลุ่มนี้ใช้งานกันไม่เต็มที่ซะส่วนใหญ่ 3. กลุ่มก่ำกึ่ง คือได้ทำงานและความบันเทิงไปด้วยแต่จะเน้นความบันเทิง (คือพวกค้นหาตัวเองไม่เจอ) กลุ่มนี้เป็นกลุ่มที่มาแรง และได้ยอดขายมากที่สุด เพราะอะไรกลุ่มที่ 3 มันถึงได้มาแรง เพราะว่าเป็นเหมือนกันกลุ่มคนที่เข้ามือใหม่อยากได้ Notebook ครับ แต่ไม่ได้ศึกษาว่าจะเอามาทำงาน หรือว่าเพื่อความบันเทิง แต่ส่วนมากแล้วทุกคนก็ทำทั้งสองอย่างอยู่แล้วใน Desktop แต่ว่าทำไมผมแบ่งมันออกมา มันคือเป็นกลุ่มที่เป็นตลาดใหม่เลยก็ว่าได้ เพราะว่าในอดีต คนที่จะซื้อ Notebook มาใช้นั้นต้องเอามาทำงานกันซะมาก เพราะว่าราคาค่าตัวมันแพงกว่าชาวบ้านเค้ามาก คือหลักแสนน่ะครับ และมีเลือกรุ่นได้น้อยด้วย แต่ว่าเมื่อกาลเวลาผ่านไปมันก็เลยถูกลงจนคนที่ไม่ได้เอาไว้ทำงานจับต้องได้(บ้าง) ทำให้ผู้ผลิตต่าๆง หันมาเอาใจคนกลุ่มนี้มากขึ้น ใส่ spec ให้ดูดี(มีชาติตระกูล) ลงไป แต่ก็มีหลายๆ ยี่ห้อไม่ตามกระแส เพราะว่าต้นทุน Notebook ที่สูง และทำกำไรได้มากด้วย ทำให้จะลงมาสู้ทำไม เพราะว่ามันคืออู่ข้าวอู่น้ำของพวก Brand ต่างๆ มานานมากเพราะว่า Desktop โดนกลุ่มพวกเครื่องประกอบ และพวก LocalBrand ตีหมดแล้ว จริงไหม พวก Brand ดังๆ เลยต้องกลับลำให้ราคาคงตัวจะมีไม่กี่ยี่ห้อที่ลงมาสู้แต่ก็พับเสื่อหนีหรือต้องกลับมาที่เดิมเพราะต้นทุนที่สูงมากเช่นนี้คงได้เจ็งแน่นอน

ซึ่งจากที่ได้กล่าวมาย่อหน้าที่แล้วนะ จะเห็นว่าทำไมถึงสาเหตุที่ว่า วัยรุ่นส่วนใหญ่สมัยนี้ หรือนักศึกษาทั่วไป ซึ่งส่วนมากที่ไม่มีความจำเป็นในการซื้อใช้มากนัก และก็อีกส่วนที่ควรจะซื้อมาใช้แต่ดันไม่ซื้อ (เอากับมันดิ) ถึงได้ซื้อหามาใช้กันเพื่อนอวด หรือโชว์สาว (เรื่องจริงเจอมากับตัว 555 ) ตัดสินใจซื้อ Notebook มาเพื่อนสนองความต้องการ ต่างๆ ที่ได้กล่าวมาหลายๆ ข้อก่อนหน้านี้กันมากขึ้น ทั้งๆ ที่ไม่ได้ศึกษาก่อนว่ามันมี ข้อดี ข้อเสียอย่างไร ทำให้เกิดปรากฎการณ์ด้านการขายออกเป็นของมือสองออกมามากมายในระยะหนึ่งที่ผ่านมา คือกลายเป็นว่าคนซื้อด่าคนขายว่า “หลอกขายของ” คนขายก็ปวดหัวคิดในใจประมาณว่า “ไม่ศึกษาก่อนซื้อฟร่ะ” กลายเป็นผลเสียต่อทั้งสองฝ่าย คนขายก็เสียชื้อ คนซื้อก็เสียเงิน (+ อารมณ์) แถมเสียดุลการค้าด้วย (เอาเข้าไปตรู) …..

ซึ่งหลายๆ คนก็รอให้เทคโนโลยีด้าน Notebook ใหม่ๆ มาก่อน ซึ่งมันก็มีของใหม่มาเรื่อยๆ ไม่ว่าคุณจะซื้อ Desktop หรือ Notebook พวกนี้มันคือสินค้าเทคโนโลยีครับ สักวันคุณก็ต้องเปลี่ยนใหม่ ไม่ต้องรอมันหรอก พวก เทคโนโลยีใหม่ๆ น่ะ ถ้าจำเป็นก็ซื้อเหอะ มันไม่มีประโยชน์อะไรที่จะรอหรอกครับ แต่ว่าซื้อไม่ต้อง Over มาก เอาที่คิดว่าคุ้มค่ากับการใช้งาน พอสมควรก็พอ ไม่ต้องบ้าตามมันมาก เพราะว่ามันเปลี่ยนรุ่นเปลี่ยนเทคโนโลยีกันทุก ครึ่งปีอยู่แล้ว คือตอนนี้ซื้อมาไม่ต้องหวัง Upgrade กันหล่ะ เพราะว่าไม่คุ้มกันอยู่แล้วในตอนนี้ (ก็คุณท่านเล่นเปลี่ยนรูปแบบระบบซะทุกปี ใครจะไปนั่งตามหล่ะครับ)

สุดท้าย บ่นมาก็มาก อยากให้มองว่าคนซื้อ Notebook บางส่วนซื้อมาสนองความต้องการด้านการใช้งาน เรื่องการทำงานซะมากกว่าด้านความบันเทิงครับ ซึ่งที่ซื้อมากกว่า 70% นั้นเอามาทำงาน หรือเรียน (เอามาเรียนจริงๆนะ) แน่นอน และก็มีส่วนหนึ่งที่เอามาทำเท่ (เดี่ยวจะรู้ว่านรกมีจริงถ้ามันหมดประกัน หรือทำพัง 555) แต่มีส่วนน้อยที่เอามาทำเท่อวดสาว ….. อย่ามองคนใช้ Notebook แบบนั้นเลย ……