[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-th-1-1-all-learn-rust-ep10-structs-data-modeling-basics-wrap-up-all--*":3,"academy-blog-translations-jr23sw5fmzc263p":78},{"data":4,"page":77,"perPage":77,"totalItems":77,"totalPages":77},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":70,"keywords":71,"locale":46,"published_at":72,"scheduled_at":13,"school_blog":68,"short_description":73,"slug":74,"status":66,"title":75,"updated":76,"updated_by":13,"views":69},"โครงสร้างของ Struct ในภาษา Rust เปรียบเทียบระหว่าง Blueprint และ Instance พร้อมตัวอย่างการใช้ Method และ impl","sclblg987654321","school_blog_translations","\u003Cp>ยินดีต้อนรับเข้าสู่ตอนสุดท้ายของ \u003Ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https:\u002F\u002Fwww.superdevacademy.com\u002Fblogs\u002Fcategories\u002FRust%20The%20Series\">\u003Cstrong>Rust The Series (Basic Edition)\u003C\u002Fstrong>\u003C\u002Fa> ครับ! หลังจากที่เราฝ่าฟันเรียนรู้เรื่องกฎเหล็กการจัดการ Memory และ\u003Ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https:\u002F\u002Fwww.superdevacademy.com\u002Fblogs\u002Flearn-rust-ep8-borrowing-and-references\">\u003Cstrong>การยืมข้อมูล (Borrowing)\u003C\u002Fstrong>\u003C\u002Fa> ของ Rust ไปแล้ว หลายคนอาจจะเริ่มมีคำถามในใจว่า:\u003C\u002Fp>\u003Cblockquote>\u003Cp>\u003Cem>\"ถ้าผมต้องการสร้างตัวแปรเดียวที่เก็บข้อมูลหลายอย่างไว้ด้วยกัน เช่น ข้อมูลสมาชิกหนึ่งคน ที่มีทั้ง ชื่อ (String), อายุ (i32) และ สถานะสมาชิก (bool) ผมจะมัดรวมมันไว้ได้ยังไง?\"\u003C\u002Fem>\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>ในภาษาอื่นเราอาจจะนึกถึง Class หรือ Object แต่ในภาษา Rust เรามีอาวุธที่เรียกว่า \u003Cstrong>Struct (Structure)\u003C\u002Fstrong> ซึ่งเป็นเครื่องมือสำหรับสร้าง \u003Ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https:\u002F\u002Fwww.superdevacademy.com\u002Fblogs\u002Frust-series-ep5-data-types\">\u003Cstrong>Data Type\u003C\u002Fstrong>\u003C\u002Fa> ในแบบฉบับของคุณเองครับ!\u003C\u002Fp>\u003Ch2>1. Struct คืออะไร?\u003C\u002Fh2>\u003Cp>ถ้าจะสรุปให้เข้าใจง่ายที่สุด \u003Cstrong>Struct\u003C\u002Fstrong> คือการนำข้อมูลหลายๆ ประเภทมามัดรวมกันเป็นก้อนเดียว โดยเราจะเรียกข้อมูลแต่ละตัวที่อยู่ในนั้นว่า \u003Cstrong>Fields\u003C\u002Fstrong> ครับ\u003C\u002Fp>\u003Cp>ความเจ๋งของ Struct คือการที่เราสามารถตั้งชื่อให้กับข้อมูลแต่ละส่วนได้ (ต่างจาก Tuple ที่เราต้องจำตามลำดับ Index) ทำให้โค้ดของเราอ่านง่ายขึ้นมาก และมันเปรียบเสมือนแบบแปลน (Blueprint) ที่บอกว่าวัตถุชิ้นหนึ่งต้องประกอบด้วยข้อมูลอะไรบ้างนั่นเอง\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>\u002F\u002F การประกาศ Struct (การสร้างแบบแปลน)\nstruct User {\n    username: String,    \u002F\u002F ชื่อผู้ใช้งาน\n    email: String,       \u002F\u002F อีเมล\n    sign_in_count: u64,  \u002F\u002F จำนวนครั้งที่เข้าสู่ระบบ\n    active: bool,        \u002F\u002F สถานะการใช้งาน (เปิด\u002Fปิด)\n}\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>2. การสร้าง Instance (นำแบบแปลนมาใช้จริง)\u003C\u002Fh2>\u003Cp>เมื่อเรามีแบบแปลน (Struct) แล้ว ขั้นตอนต่อไปคือการนำมาสร้างข้อมูลจริงที่เราเรียกว่า \u003Cstrong>Instance\u003C\u002Fstrong> ครับ\u003C\u002Fp>\u003Cp>การสร้าง Instance ก็เหมือนกับการกรอกข้อมูลลงในแบบฟอร์มที่เราเตรียมไว้ โดยมีจุดที่ต้องระวังคือความเข้มงวดเรื่องข้อมูล เพราะ Rust จะบังคับให้เราใส่ข้อมูลให้ครบทุก Field ที่ประกาศไว้ในตอนแรกครับ\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>fn main() {\n    \u002F\u002F สร้าง Instance ชื่อ user1 (ใช้ mut เพื่อให้แก้ไขข้อมูลภายหลังได้)\n    let mut user1 = User {\n        email: String::from(\"admin@superdev.com\"),\n        username: String::from(\"superdev_admin\"),\n        active: true,\n        sign_in_count: 1,\n    };\n\n    \u002F\u002F การเข้าถึงข้อมูล: ใช้เครื่องหมายจุด (Dot Notation) เช่น user1.email\n    \u002F\u002F การแก้ไขข้อมูล: เราเปลี่ยนค่าได้ทันทีเพราะประกาศเป็น mut ไว้\n    user1.email = String::from(\"contact@superdev.com\");\n    \n    println!(\"User: {} (Email: {})\", user1.username, user1.email);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>ข้อควรรู้เกี่ยวกับความปลอดภัย:\u003C\u002Fh3>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>Immutable by Default:\u003C\u002Fstrong> ตามสไตล์ของ Rust ถ้าคุณประกาศแค่ \u003Ccode>let user1 = ...\u003C\u002Fcode> คุณจะไม่สามารถแก้ไขข้อมูลใน Field ไหนได้เลยหลังจากสร้างเสร็จ\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>All or Nothing:\u003C\u002Fstrong> ใน Rust เราไม่สามารถเลือกให้ Field ใด Field หนึ่งเป็น \u003Ccode>mut\u003C\u002Fcode> แยกกันได้ ถ้าจะแก้ ต้องแก้ได้ทั้งก้อน (ทั้ง Instance) เท่านั้นครับ\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>3. Method: เพิ่มความสามารถให้ Struct\u003C\u002Fh2>\u003Cp>ลำพังแค่เก็บข้อมูลได้ก็นับว่าดีแล้ว แต่สิ่งที่ทำให้ Struct ทรงพลังขึ้นไปอีกขั้นคือการใส่ Method หรือฟังก์ชันที่ผูกติดกับ Struct ลงไปครับ เพื่อให้วัตถุนั้นๆ มีความสามารถในตัวมันเอง\u003C\u002Fp>\u003Cp>เราจะใช้คีย์เวิร์ด \u003Cstrong>\u003Ccode>impl\u003C\u002Fcode>\u003C\u002Fstrong> (ย่อมาจาก Implementation) เพื่อประกาศว่า \"ต่อไปนี้คือความสามารถของ Struct นี้คร้าบ\"\u003C\u002Fp>\u003Cp>Rust\u003C\u002Fp>\u003Cpre>\u003Ccode>struct Rectangle {\n    width: u32,\n    height: u32,\n}\n\nimpl Rectangle {\n    \u002F\u002F Method สำหรับคำนวณพื้นที่\n    \u002F\u002F เราใช้ &amp;self เพื่อบอกว่า \"ขอยืมอ่านข้อมูลจากตัวเองหน่อยนะ\"\n    fn area(&amp;self) -&gt; u32 {\n        self.width * self.height\n    }\n}\n\nfn main() {\n    let rect = Rectangle { width: 30, height: 50 };\n    \n    \u002F\u002F เรียกใช้งานความสามารถผ่านเครื่องหมายจุด (.)\n    println!(\"พื้นที่สี่เหลี่ยมคือ: {} ตารางหน่วย\", rect.area());\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>ทำไมต้องมี \u003Ccode>&amp;self\u003C\u002Fcode>?\u003C\u002Fh3>\u003Cp>สังเกตไหมครับว่าในพารามิเตอร์เราใส่ \u003Ccode>&amp;self\u003C\u002Fcode> ลงไป นั่นคือการนำกฎ \u003Cstrong>Borrowing\u003C\u002Fstrong> จาก EP.8 มาประยุกต์ใช้:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>มันคือการยืมอ่าน ข้อมูลของตัวเอง (Instance นั้นๆ) มาประมวลผล\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>ถ้าเราอยากให้ Method นั้นแก้ไขค่าในตัวเองได้ เราก็แค่เปลี่ยนเป็น \u003Ccode>&amp;mut self\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>นี่คือความสวยงามของ Rust ที่แม้แต่ใน Object-Oriented Style \u003Ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https:\u002F\u002Fwww.superdevacademy.com\u002Fblogs\u002Frust-ownership-memory-management-ep7\">\u003Cstrong>กฎ Ownership\u003C\u002Fstrong>\u003C\u002Fa> ก็ยังตามมาคุ้มครองให้เราเขียนโค้ดได้อย่างปลอดภัยเสมอ!\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>4. บทสรุปการเดินทางของ Rust The Series\u003C\u002Fh2>\u003Cp>ยินดีด้วยครับ! ตลอด 10 EP ที่ผ่านมา เราได้ร่วมกันวางรากฐานที่สำคัญที่สุดเพื่อก้าวเข้าสู่โลกของ Rust อย่างเต็มตัว โดยเราสามารถสรุปเส้นทางความสำเร็จครั้งนี้ได้ดังนี้ครับ:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>EP.1-3 (The Beginning):\u003C\u002Fstrong> การเตรียมอาวุธให้พร้อม ติดตั้งเครื่องมือ และทำความรู้จักกับ \u003Cstrong>Cargo\u003C\u002Fstrong> ผู้ช่วยอัจฉริยะที่จะอยู่กับเราไปตลอด\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>EP.4-6 (The Core):\u003C\u002Fstrong> ทำความเข้าใจพื้นฐานที่ขาดไม่ได้ ทั้งเรื่องตัวแปร, \u003Cstrong>Data Types\u003C\u002Fstrong> และการควบคุมทิศทางของโปรแกรม (\u003Cstrong>Control Flow\u003C\u002Fstrong>)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>EP.7-9 (The Soul):\u003C\u002Fstrong> เจาะลึกหัวใจสำคัญที่ทำให้ Rust แตกต่างจากทุกภาษาในโลกอย่าง \u003Cstrong>Ownership, Borrowing\u003C\u002Fstrong> และ \u003Cstrong>Slices\u003C\u002Fstrong>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>EP.10 (The Architecture):\u003C\u002Fstrong> การนำทุกอย่างมาประกอบร่างเพื่อออกแบบโครงสร้างข้อมูลในสไตล์คุณด้วย \u003Cstrong>Structs\u003C\u002Fstrong>\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>ถึงแม้ซีรีส์ภาคพื้นฐานจะจบลงตรงนี้ แต่การเดินทางในโลกของ Rust เพิ่งเริ่มต้นขึ้นเท่านั้น! ยังมีขุมทรัพย์ความรู้ที่น่าตื่นเต้นอย่าง Enums, Pattern Matching, Traits และ Error Handling รอให้คุณมาพิชิตในลำดับถัดไปครับ\u003C\u002Fp>\u003Cp>\u003Cstrong>\"การที่คุณเริ่มคุยกับ Compiler ของ Rust รู้เรื่องในวันนี้ คือก้าวแรกสู่การเป็นนักพัฒนาที่เขียนซอฟต์แวร์ได้ปลอดภัยและมีประสิทธิภาพสูงที่สุดคนหนึ่งครับ\"\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp>\u003C\u002Fp>\u003Cdiv data-type=\"horizontalRule\">\u003Chr>\u003C\u002Fdiv>\u003Ch2>ส่งท้ายจากใจทีมงาน\u003C\u002Fh2>\u003Cp>ขอขอบคุณเพื่อนๆ ทุกคนที่ติดตาม \u003Cstrong>Rust The Series\u003C\u002Fstrong> เดินทางร่วมกันมาจนจบภาคพื้นฐานนะครับ!\u003C\u002Fp>\u003Cp>เราหวังเป็นอย่างยิ่งว่าซีรีส์นี้จะช่วยพังทลายกำแพงความเชื่อที่ว่า \u003Cem>\"Rust เขียนยาก\"\u003C\u002Fem> ให้กลายเป็นความสนุกและความมั่นใจในการเรียนรู้แทน สำหรับพวกเราแล้ว ความปลอดภัยและความเร็วของ Rust ไม่ใช่แค่ฟีเจอร์ของภาษา แต่คือศิลปะในการเขียนโปรแกรมที่ยอดเยี่ยมครับ\u003C\u002Fp>\u003Cp>บทความหน้าเราจะมีโปรเจกต์ใหม่ๆ มาฝาก หรือจะพาคุณก้าวข้ามขีดจำกัดไปสู่ Rust ในระดับ Advanced แค่ไหน... ต้องรอติดตามให้ดีครับ!\u003C\u002Fp>\u003Cp>🎯 \u003Cstrong>ติดตามความรู้สาย Dev แบบสุดจัดได้ที่ Superdev Academy:\u003C\u002Fstrong> ไม่อยากพลาดบทความเทคนิคเชิงลึกและอัปเดตเทคโนโลยีใหม่ๆ จากเรา ติดตามได้ทุกช่องทางที่นี่ครับ:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>🔵 Facebook: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.academy.th\">\u003Cstrong>Superdev Academy Thailand\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(อัปเดตข่าวสารและบทความใหม่)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>🎬 YouTube: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.youtube.com\u002F@SuperdevAcademy\">\u003Cstrong>Superdev Academy Channel\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(ติวเข้มแบบวิดีโอ)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>📸 Instagram: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.instagram.com\u002Fsuperdevacademy\u002F\">\u003Cstrong>@superdevacademy\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(เกร็ดความรู้สั้นๆ และเบื้องหลังการทำงาน)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>🎬 TikTok: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.tiktok.com\u002F@superdevacademy?lang=th-TH\">\u003Cstrong>@superdevacademy\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(Tips &amp; Tricks ฉบับย่อยง่าย)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>🌐 Website: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"http:\u002F\u002Fsuperdevacademy.com\">\u003Cstrong>superdevacademy.com\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(คลังบทความและคอร์สเรียนฉบับเต็ม)\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>แล้วเจอกันในซีรีส์ถัดไปครับ... \u003Cstrong>Happy Coding! 🦀✨\u003C\u002Fstrong>\u003C\u002Fp>","19vq5ffeo63c_swixps8ork.png","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002Fbb4c2jmojytcilt\u002F19vq5ffeo63c_swixps8ork.png","2026-04-27 08:47:28.556Z","",{"keywords":15,"locale":40,"school_blog":50},[16,22,27,31,35],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":19,"updated_by":13},"sclkey987654321","school_keywords","2026-04-27 03:00:35.773Z","zqd02oa08lbb7oz","สอนภาษา Rust",{"collectionId":17,"collectionName":18,"created":23,"created_by":13,"id":24,"name":25,"updated":26,"updated_by":13},"2026-03-04 08:20:06.235Z","254619mvnk1hr7y","Rust","2026-04-10 16:07:25.292Z",{"collectionId":17,"collectionName":18,"created":28,"created_by":13,"id":29,"name":30,"updated":28,"updated_by":13},"2026-04-27 08:44:07.827Z","js0lw99aehm9lee","Rust Struct",{"collectionId":17,"collectionName":18,"created":32,"created_by":13,"id":33,"name":34,"updated":32,"updated_by":13},"2026-04-27 08:44:15.504Z","32obullvepjuri6","Rust Method",{"collectionId":17,"collectionName":18,"created":36,"created_by":13,"id":37,"name":38,"updated":39,"updated_by":13},"2026-03-04 08:31:35.253Z","r1k7m3354tp5ovr","เรียนเขียนโปรแกรม","2026-04-10 16:07:43.096Z",{"code":41,"collectionId":42,"collectionName":43,"created":44,"flag":45,"id":46,"is_default":47,"label":48,"updated":49},"th","pbc_1989393366","locales","2026-01-22 10:59:55.832Z","twemoji:flag-thailand","s8wri3bt4vgg2ji",true,"Thai","2026-04-10 15:42:46.614Z",{"category":51,"collectionId":52,"collectionName":53,"expand":54,"id":68,"views":69},"mfqe235iv6x1or8","pbc_2105096300","school_blogs",{"category":55},{"blogIds":56,"collectionId":57,"collectionName":58,"created":59,"created_by":13,"id":51,"image":60,"image_alt":13,"image_path":61,"label":62,"name":63,"priority":64,"publish_at":65,"scheduled_at":13,"status":66,"updated":67,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-16 04:40:07.104Z","47vt5s1gglj_tz0b90vnge.png","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fmfqe235iv6x1or8\u002F47vt5s1gglj_tz0b90vnge.png",{"en":63,"th":63},"Rust The Series",2,"2026-03-16 04:40:09.199Z","published","2026-04-25 02:32:15.619Z","jr23sw5fmzc263p",138,"bb4c2jmojytcilt",[20,24,29,33,37],"2026-05-05 03:14:26.574Z","ปิดท้ายภาคพื้นฐานด้วยการเรียนรู้เรื่อง Structs ในภาษา Rust วิธีการสร้าง Data Type ในแบบฉบับของคุณเอง การใช้งาน Method ผ่าน impl และการสรุปบทเรียนสำคัญตลอด 10 ตอนเพื่อก้าวสู่ระดับ Advanced","learn-rust-ep10-structs-data-modeling-basics-wrap-up","การออกแบบโครงสร้างข้อมูลด้วย Structs | Rust The Series EP.10","2026-05-05 03:14:26.575Z",1,{"th":74,"en":74}]