เรียนรู้ C ก่อนเรียนรู้ Objective-C [ปิด]


107

ในฐานะนักพัฒนา Apple ที่ต้องการฉันต้องการรับความคิดเห็นของชุมชนว่าควรเรียนรู้ C ก่อนจะดีกว่าไหมก่อนที่จะย้ายเข้าสู่ Objective-C และท้ายที่สุด Cocoa Framework?

ลำไส้ของฉันบอกว่าเรียนรู้ C ซึ่งจะทำให้ฉันมีพื้นฐานที่ดี

คำตอบ:


163

ฉันจะเรียนรู้ C ก่อน ฉันเรียนรู้ C (และได้มากใน C) ก่อนที่จะย้ายไป Obj-C ฉันมีเพื่อนร่วมงานหลายคนที่ไม่เคยเป็นโปรแกรมเมอร์ C จริงๆพวกเขาเริ่มต้นด้วย Obj-C และเรียนรู้ C ให้มากที่สุดเท่าที่จำเป็นเท่านั้น

ทุกครั้งที่ฉันเห็นว่าพวกเขาแก้ปัญหาทั้งหมดใน Obj-C ได้อย่างไรซึ่งบางครั้งก็ส่งผลให้การแก้ปัญหางุ่มง่ามมาก โดยปกติแล้วฉันจะแทนที่รหัส Obj-C ด้วยรหัส C บริสุทธิ์ (หลังจากนั้นคุณสามารถผสมได้มากเท่าที่คุณต้องการเนื้อหาของวิธี Obj-C อาจเป็นรหัส C บริสุทธิ์ทั้งหมด) โดยไม่มีเจตนาที่จะดูถูกโปรแกรมเมอร์ Obj-C แต่อย่างใดมีโซลูชันที่สวยงามมากใน Obj-C ซึ่งเป็นโซลูชันที่ใช้งานได้ดี (และดูดีขึ้นมาก) ด้วยวัตถุ(การเขียนโปรแกรม OOP สามารถทำให้โปรแกรมที่ซับซ้อนน่ารักกว่าการเขียนโปรแกรมเชิงฟังก์ชันตัวอย่างเช่นความหลากหลายเป็นคุณสมบัติที่ยอดเยี่ยม) ... และฉันชอบ Obj-C มาก (มากกว่า C ++ มากฉันเกลียดไวยากรณ์ C ++ และคุณลักษณะของภาษาบางอย่างก็เกินความจำเป็น และนำไปสู่รูปแบบการพัฒนาที่ไม่ดี IMHO); อย่างไรก็ตามในบางครั้งฉันเขียนรหัส Obj-C ของเพื่อนร่วมงานอีกครั้ง (และฉันทำเช่นนั้นจริงๆถ้าฉันคิดว่านี่เป็นสิ่งที่จำเป็นจริงๆ) รหัสผลลัพธ์มักจะเล็กกว่า 50% ต้องการเพียง 25% ของหน่วยความจำที่ใช้ ก่อนหน้านี้และเร็วขึ้นประมาณ 400% เมื่อรันไทม์

สิ่งที่ฉันพยายามจะพูดที่นี่: ทุกภาษามีข้อดีข้อเสีย C มีข้อดีข้อเสีย Obj-C ก็เช่นกัน อย่างไรก็ตามคุณสมบัติที่ยอดเยี่ยมจริงๆของ Obj-C (นั่นคือเหตุผลที่ฉันชอบมันมากกว่า Java) คือคุณสามารถข้ามไปที่ C ธรรมดาได้ตามต้องการและกลับมาอีกครั้ง เหตุใดจึงเป็นคุณสมบัติที่ยอดเยี่ยมเช่นนี้ เนื่องจากเช่นเดียวกับที่ Obj-C แก้ไขข้อเสียของ C บริสุทธิ์หลายประการ C บริสุทธิ์สามารถแก้ไขข้อเสียบางประการของ Obj-C ได้ หากคุณผสมผสานเข้าด้วยกันคุณจะได้รับทีมที่ทรงพลังมาก

หากคุณเรียนรู้แค่ Obj-C และไม่มีความคิดเกี่ยวกับ C หรือรู้เพียงพื้นฐานของมันและไม่เคยลองว่ามันสามารถแก้ปัญหาทั่วไปได้อย่างหรูหราเพียงใดคุณได้เรียนรู้เพียงครึ่งเดียวของ Obj-C C เป็นส่วนพื้นฐานของ Obj-C ความสามารถในการใช้ C ได้ทุกที่ทุกเวลาเป็นคุณสมบัติพื้นฐานของมัน

ตัวอย่างทั่วไปคือรหัสบางอย่างที่เราใช้ซึ่งต้องเข้ารหัสข้อมูลใน base64 แต่เราไม่สามารถใช้ไลบรารีภายนอกสำหรับสิ่งนั้น (ไม่มี OpenSSL lib) เราใช้ตัวเข้ารหัส base64 ซึ่งเขียนทั้งหมดโดยใช้คลาส Cocoa มันใช้งานได้ดี แต่เมื่อเราเข้ารหัสข้อมูลไบนารี 200 MB มันต้องใช้เวลาชั่วนิรันดร์และค่าใช้จ่ายของหน่วยความจำก็ไม่สามารถยอมรับได้ ฉันแทนที่ด้วยตัวเข้ารหัส base64 ขนาดเล็กและกะทัดรัดเป็นพิเศษที่เขียนทั้งหมดเป็นฟังก์ชัน C เดียว (ฉันคัดลอกเนื้อหาของฟังก์ชันลงในตัวเมธอดเมธอดใช้ NSData เป็นอินพุตและส่งคืน NSString เป็นเอาต์พุตอย่างไรก็ตามภายในฟังก์ชันทุกอย่างเป็น C) ตัวเข้ารหัส C มีขนาดกะทัดรัดกว่ามากมันเอาชนะตัวเข้ารหัสโกโก้บริสุทธิ์ด้วยความเร็วปัจจัย 8 และค่าใช้จ่ายของหน่วยความจำก็น้อยกว่ามาก การเข้ารหัส / ถอดรหัสข้อมูลการเล่นกับบิตและงานระดับต่ำที่คล้ายกันเป็นเพียงจุดแข็งของ C

อีกตัวอย่างหนึ่งคือโค้ด UI บางส่วนที่ดึงกราฟจำนวนมาก สำหรับการจัดเก็บข้อมูลที่จำเป็นในการวาดกราฟเราใช้ NSArray's NSMutableArray จริงๆแล้วเนื่องจากกราฟเป็นภาพเคลื่อนไหว ผลลัพธ์: ภาพเคลื่อนไหวกราฟช้ามาก เราแทนที่ NSArray ทั้งหมดด้วยอาร์เรย์ C ปกติออบเจ็กต์ที่มีโครงสร้าง (หลังจากที่ข้อมูลพิกัดกราฟทั้งหมดไม่มีอะไรที่คุณต้องมีในออบเจ็กต์) การเข้าถึงตัวนับด้วยวิธีง่ายๆสำหรับลูปและเริ่มย้ายข้อมูลระหว่างอาร์เรย์ด้วยเมมโคปีแทนที่จะนำข้อมูลจากอาร์เรย์หนึ่งไปยัง อีกอันคือดัชนีสำหรับดัชนี ผลลัพธ์: เพิ่มความเร็วตามปัจจัย 4 กราฟเคลื่อนไหวได้อย่างราบรื่นแม้ในระบบ PPC รุ่นเก่า

จุดอ่อนของ C คือทุกโปรแกรมที่ซับซ้อนมากขึ้นจะน่าเกลียดในระยะยาว การทำให้แอปพลิเคชัน C สามารถอ่านได้ขยายและจัดการได้ต้องการวินัยของโปรแกรมเมอร์อย่างมาก หลายโครงการล้มเหลวเพราะวินัยนี้ขาดหายไป Obj-C ช่วยให้คุณจัดโครงสร้างแอปพลิเคชันของคุณได้ง่ายโดยใช้คลาสการสืบทอดโปรโตคอลและอื่น ๆ ที่กล่าวว่าฉันจะไม่ใช้ฟังก์ชัน C บริสุทธิ์ข้ามพรมแดนของวิธีการเว้นแต่จำเป็น ฉันชอบที่จะเก็บรหัสทั้งหมดไว้ในแอป Objective-C ภายในวิธีการของวัตถุ อย่างอื่นเอาชนะวัตถุประสงค์ของแอปพลิเคชัน OO อย่างไรก็ตามภายในวิธีการบางครั้งฉันใช้ C บริสุทธิ์เท่านั้น


และถ้าฉันรู้จัก c ++ แล้วและต้องการเรียนรู้ Objective-C สำหรับ iPhone / iTouch จำเป็นต้องเรียนรู้ C อะไรหรือไม่?
chester89

11
@ chester89: ถ้าคุณรู้จัก C ++ อยู่แล้วคุณก็รู้เกี่ยวกับ C มากพอเพื่อเริ่มต้นกับ Objective-C
Sven

Sven พูดถูก C ++ นั้นซับซ้อนมากและใช้ C บริสุทธิ์จำนวนมากอยู่แล้วถ้าคุณรู้จัก C ++ เป็นอย่างดีคุณก็ควรรู้จัก C ดีพอ
Mecki

นี่เป็นเพลงโปรดของฉันในหัวข้อนี้ขอบคุณ
Morkrom

1
@FrederikWitte ปล่อย C ++ ออกไปมันจะทำให้คุณสับสนในฐานะผู้เริ่มต้นเท่านั้น (และไม่ใช่ภาษาที่คุณต้องการสำหรับการพัฒนาอุปกรณ์เคลื่อนที่) เริ่มต้นด้วย Java เป็นภาษาการสอนที่ดีและเพียงแค่รู้ว่า Java ก็เพียงพอที่จะพัฒนาสำหรับ Android (อาจจะเว้นแต่คุณต้องการเขียนเกมหรือเครื่องเล่นวิดีโอหรือมากกว่านั้น) จากนั้นเรียนรู้ C และ Obj-C ในที่สุดเว้นแต่คุณต้องการข้ามสิ่งที่เรียนรู้ Swift แทน ทางเลือกของคุณ.
เมคกี

25

คุณสามารถเรียนรู้ C และ Objective-C ได้อย่างเพียงพอในเวลาเดียวกัน - ไม่จำเป็นต้องเรียนรู้ข้อเล็ก ๆ น้อย ๆ ของ C (รวมถึงเลขคณิตของตัวชี้และอื่น ๆ ) ก่อนที่จะเริ่มด้วยการเพิ่ม Objective-C ในภาษาและในฐานะโปรแกรมเมอร์มือใหม่ การเริ่มใช้ Objective-C อย่างรวดเร็วอาจช่วยให้คุณเริ่ม "คิดในวัตถุ" ได้เร็วขึ้น

ในแง่ของทรัพยากรที่มีอยู่เอกสารของ Apple มักจะถือว่าคุ้นเคยกับ C ดังนั้นการเริ่มต้นด้วยภาษาโปรแกรม Objective-C 2.0จะไม่เป็นประโยชน์กับคุณมากนัก ฉันจะลงทุนในสำเนา Programming ใน Objective-C โดย Stephen Kochan (ขึ้นอยู่กับว่าคุณต้องการดำเนินการเร็วแค่ไหนคุณอาจพิจารณารอรุ่นที่สอง):

การเขียนโปรแกรม Objective-C นักพัฒนา Library Programming Objective-C 2.0 Developers Library

ไม่ถือว่ามีประสบการณ์มาก่อนและสอน Objective-C และ C ให้คุณได้มากเท่าที่คุณต้องการ

หากคุณรู้สึกทะเยอทะยานเล็กน้อยคุณอาจเริ่มต้นด้วยบทช่วยสอน "Learn C" ของ Scott Stevensonแต่มีข้อกำหนดเบื้องต้นบางประการ ("คุณควรรู้ภาษาสคริปต์หรือภาษาโปรแกรมอย่างน้อยหนึ่งภาษารวมถึงฟังก์ชันตัวแปรและลูปของคุณแล้ว ' จะต้องพิมพ์คำสั่งลงใน Mac OS X Terminal ด้วย ")

(สำหรับบันทึกและเพื่อบริบท: ฉันเรียนรู้ทั้งสองอย่างพร้อมกันในปี 1991 - ดูเหมือนว่าฉันจะไม่ทำอันตรายใด ๆ แม้ว่าฉันจะมีพื้นหลังในภาษาเบสิกปาสคาลโลโก้และ LISP )


2
คุณไม่ควรพบว่าจำเป็นอย่างยิ่งที่จะต้องเรียนรู้ C ก่อน โดยเฉพาะอย่างยิ่งถ้าคุณรู้ภาษาเช่น C # ของ Java อยู่แล้ว C # และ Java เป็นหนี้มากสำหรับวัตถุประสงค์ C แม้ว่า C # จะเป็นหนี้มากกว่าประสบการณ์ของ Helsbergs และความผิดพลาดกับ Delphi
Daniel Honig

18

ฉันคิดมากเกี่ยวกับปัญหานี้ก่อนที่จะเขียนหนังสือเรื่อง Objective-C อันดับแรกฉันเชื่อจริงๆว่าการเรียนรู้ภาษา C ก่อนที่จะเรียน Objective-C นั้นเป็นเส้นทางที่ผิด C เป็นขั้นตอนภาษาที่มีคุณสมบัติมากมายที่ไม่จำเป็นสำหรับการเขียนโปรแกรมใน Objective-C โดยเฉพาะในระดับมือใหม่ ในความเป็นจริงการใช้คุณลักษณะบางอย่างเหล่านี้ขัดต่อหลักการของการยึดมั่นในวิธีการเขียนโปรแกรมเชิงวัตถุที่ดี นอกจากนี้ยังไม่ควรสอนรายละเอียดทั้งหมดของภาษาขั้นตอน (และโจมตีวิธีแก้ปัญหาด้วยฟังก์ชันและเทคนิคการเขียนโปรแกรมเชิงโครงสร้าง) ก่อนที่จะเรียนรู้ภาษาเชิงวัตถุ สิ่งนี้สามารถเริ่มโปรแกรมเมอร์ไปในทิศทางที่ไม่ถูกต้องซึ่งอาจนำไปสู่การพัฒนาแนวความคิดและแนวความคิดที่ไม่ถูกต้องเพื่อส่งเสริมวินัยการเขียนโปรแกรมเชิงวัตถุที่ดี เพียงเพราะ Objective-C เป็นส่วนเสริมของภาษา C ไม่ได้หมายความว่าคุณต้องเรียนรู้ C ก่อน!

ฉันคิดว่าการสอน Objective-C และภาษา C เป็นภาษาบูรณาการเดียวเป็นแนวทางที่ถูกต้อง ไม่มีเหตุผลที่จะเรียนรู้ว่าคำสั่ง "for" มาจากภาษา C และไม่ได้มาจากภาษา superset Objective-C นอกจากนี้ทำไมต้องเรียนรู้โดยละเอียดเกี่ยวกับสิ่งต่างๆเช่นอาร์เรย์และสตริง C (และจัดการกับสิ่งเหล่านี้)มาก่อนเรียนรู้เกี่ยวกับอาร์เรย์ (NSArray) และสตริงออบเจ็กต์ (NSString) เช่น? ข้อความ C จำนวนมากอุทิศเวลาให้กับโครงสร้างและตัวชี้ไปยังโครงสร้างและวนซ้ำผ่านอาร์เรย์ที่มีพอยน์เตอร์ แต่คุณสามารถเริ่มเขียนโปรแกรม Objective-C ได้โดยไม่รู้เกี่ยวกับคุณสมบัติของภาษา C เหล่านี้ และสำหรับโปรแกรมเมอร์มือใหม่นั่นเป็นเรื่องใหญ่ ไม่เพียง แต่จะทำให้เส้นการเรียนรู้สั้นลง แต่ยังช่วยลดปริมาณของเนื้อหาที่ต้องเรียนรู้ (และบางส่วนก็คัดกรองออก) ในการเขียนโปรแกรม Objective-C

ฉันยอมรับว่าคุณจะต้องการเรียนรู้คุณสมบัติ C พื้นฐานมากที่สุดหากไม่ใช่ทั้งหมด แต่หลายอย่างสามารถเลื่อนออกไปได้จนกว่าจะเข้าใจการกำหนดคลาสและวิธีการทำงานกับอ็อบเจ็กต์และนิพจน์ข้อความและทำความเข้าใจแนวคิดของการสืบทอดและ ความหลากหลายเป็นที่เข้าใจกันดี


ทั้งหมดนี้มีไว้สำหรับผู้ที่ต้องการเรียนรู้อย่างรวดเร็วในขณะที่หลีกเลี่ยงการดิ้นรนและความเข้าใจอย่างลึกซึ้ง ฉันกำลังสอน noob การเขียนโปรแกรมที่สมบูรณ์ (ในขณะที่ฉันมีประสบการณ์การเขียนโปรแกรมมากกว่า 11 ปี) ในการเขียนโปรแกรมและเคยสอนคนอื่นมาก่อน (แต่ฉันไม่ใช่ครูที่จะทำให้ชัดเจน) และรู้อะไรไหม? แนวคิดทั้งหมดนี้เราทุกคนเคยชินเป็นอย่างมากและซับซ้อนและไม่ใช้งานง่ายสำหรับผู้เริ่มต้นที่สมบูรณ์! C เป็นวิธีที่ยอดเยี่ยมในการทำความเข้าใจสิ่งที่มีระดับต่ำเพียงพอดังนั้นในอนาคตมันจะไม่วิเศษสำหรับพวกเขา ที่กล่าวว่าสำหรับช่วงการเรียนรู้ของโปรแกรมเมอร์ที่ดีขึ้นจะดีกว่ากับ C ในตอนแรกด้วยกฎป่าเถื่อน =)
MANIAK_dobrii

15

ฉันจะดำดิ่งไปกับ Objective C - ถ้าคุณมีภาษาอยู่สองสามภาษาภายใต้เข็มขัดของคุณมันไม่ใช่ไวยากรณ์ที่เป็นเส้นโค้งการเรียนรู้นั่นคือ Cocoa


1
จากที่กล่าวไปแล้วมีสื่อสำหรับการเรียนรู้ C มากขึ้นพบว่าเป็นส่วนที่ยากที่สุดเกี่ยวกับ ObjC ขาดวัสดุที่จัดระเบียบได้ดีชัดเจนมีความลึกเพียงพอที่จะเปรียบเทียบกับวัสดุ C หรือ C ++ และช่วยให้คุณเข้าใจว่าอะไรคืออะไร เกิดขึ้นข้างใน
Spanky

10

ฉันคิดว่าส่วนใหญ่แล้วการเรียนรู้ C เป็นความคิดที่ดีไม่ว่าคุณจะไปอยู่ในเวทีใดอย่างน้อยที่สุดก็เพื่อให้ได้ผลงานภายในของการพัฒนาซอฟต์แวร์ก่อนที่จะใช้สินค้าที่บรรจุไว้ล่วงหน้าด้วยวิธีนี้หากมีบางอย่างผิดพลาด คุณมีโอกาสที่จะเข้าใจการทำงานภายในได้ดีขึ้น มีการอภิปรายมากมายเกี่ยวกับเรื่องนี้ใน SO และเป็นคำถามที่ค่อนข้างเป็นอัตวิสัย แต่โดยทั่วไปแล้วคุณจะใช้ C ภายในรหัส Objective-C ของคุณดังนั้นฉันเดาว่ามันขึ้นอยู่กับคุณจริงๆ ฉันเป็นคนที่มีพื้นฐาน แต่บางครั้งมันก็เข้ามาขวางทางและฉันรู้จักคนฉลาดหลายคนที่ทำงานจากบนลงล่างฉันคิดว่าส่วนสำคัญคือคุณจะต้องเข้าใจการทำงานภายในอย่างที่จะเป็น กำหนดความสามารถของคุณให้แตกต่างจากผู้ที่ไม่สามารถเพิ่มขีดความสามารถของคุณได้


การเรียนรู้ C ก่อนอาจบิดเบือนมุมมองของการเขียนโปรแกรม OO ได้หากคุณยังไม่ได้มีพื้นฐานมาก่อน การเข้ารหัสแบบมีโครงสร้างและขั้นตอนแบบผสมไม่ดี แต่ก็เป็นความจริงเช่นกันที่ OO สูญเสียคุณค่าในหลาย ๆ ที่ที่ C ส่องแสงเช่นการเขียนโค้ดระดับล่าง
Daniel Honig

1
เหตุผลของฉันในการแนะนำให้นักพัฒนาทุกคนเรียนรู้ C ในบางประเด็นอย่างน้อยก็ขึ้นอยู่กับความคิดที่ว่าแม้แต่ภาษา OO ก็ยังรวบรวมคำแนะนำเดียวกันกับ C ในตอนท้าย ตัวแปรสำหรับอ็อบเจ็กต์ใช้พอยน์เตอร์, Garbage Collectors ใช้ malloc และฟรีไฟล์จะถูกล็อคโดยใช้ที่จับ OS เมื่อเกิดข้อผิดพลาดในแอปพลิเคชัน Java หรือ C # การรู้พื้นฐานเหล่านี้จะช่วยปรับปรุงความเข้าใจของคุณเกี่ยวกับสิ่งที่ผิดพลาดได้อย่างมาก การทำความเข้าใจการจัดสรรทรัพยากรที่จะดำเนินการยังมีแนวโน้มที่จะนำไปสู่การเขียนโค้ดที่มีข้อมูลมากขึ้นซึ่งจะทำงานได้ดีที่สุดสำหรับบริบทเฉพาะ
TheXenocide

7

เป็นความคิดที่ดีที่จะเรียนรู้ C ก่อนที่จะเรียนรู้ Objective-C ซึ่งเป็นส่วนเหนือที่เข้มงวดของ C ซึ่งหมายความว่า Objective-C สามารถรองรับรหัส C ปกติทั้งหมดดังนั้นรหัสทั่วไปของโปรแกรม C จะต้องปรากฏแม้ใน Objective- รหัส C

นอกเหนือจากการมองสิ่งต่างๆอย่างหมดจดจากมุมมองของภาษาแล้วคุณจะพบว่า Mac OS X เป็นระบบปฏิบัติการ Unix ที่สมบูรณ์ ไลบรารีระดับระบบทั้งหมดเขียนด้วย C

อาจเป็นไปได้ที่จะเรียนรู้ทั้งสองอย่างในเวลาเดียวกัน แต่ฉันคิดว่าคุณจะซาบซึ้งและเข้าใจ Objective-C มากขึ้นหากคุณมีความรู้ในการทำงานที่มั่นคงของ C ก่อน


5

ฉันจะเรียน Objective-C และเรียนรู้ C ให้มากที่สุดเท่าที่คุณต้องการ

พื้นที่ของ C ที่คุณไม่ต้องพึ่งพามาก:

  • ตัวชี้เลขคณิตและอาร์เรย์ ฉันไม่ได้ใช้อาร์เรย์ C เลย
  • สาย C สตริงของ Objective-C ทำงานได้ดีกว่าและปลอดภัยกว่า
  • การจัดการหน่วยความจำด้วยตนเองหากคุณใช้ GC ใน Obj-C 2.1 ฉันขอแนะนำเส้นทางนี้ด้วยเหตุผลด้านความเร็วในการพัฒนาและประสิทธิภาพ

6
ข้อแม้อย่างหนึ่ง: การรวบรวมขยะใน Objective-C ไม่สามารถใช้ได้ในทุกแพลตฟอร์ม (โดยเฉพาะ iPhone) ซึ่งเป็นสิ่งที่ต้องระวัง
Mark Bessey

5

ในขณะที่คุณเรียน Objective-C และ Cocoa คุณไม่สามารถหลีกเลี่ยงการเรียนรู้บิตของ C ได้ตัวอย่างเช่นรูปสี่เหลี่ยมผืนผ้ามักจะแสดงโดย CGRect ซึ่งเป็นโครงสร้าง C

หากคุณมีเวลาเรียนรู้ C. อย่างที่คนอื่น ๆ กล่าวไว้ที่นี่หนังสือของ Kochan (ฉบับที่สองและครั้งแรก) เป็นหนังสือที่ยอดเยี่ยมสำหรับการอ่าน


4

มีหลายสิ่งที่คุณไม่สามารถทำได้อย่างหมดจดใน Objective-C ดังนั้นการเรียนรู้ทักษะ C ขั้นพื้นฐานจะค่อนข้างสำคัญ อย่างน้อยคุณจะต้องเข้าใจการประกาศตัวแปรและฟังก์ชั่นไลบรารี C พื้นฐานมิฉะนั้นคุณจะหงุดหงิด


3

จริงๆแล้วภาษาหลายภาษาจึงขึ้นอยู่กับไวยากรณ์ C ซึ่งเป็นสิ่งที่ดีที่จะคุ้นเคย ฉันจะใช้เวลาหนึ่งหรือสองสัปดาห์เพื่อทำความคุ้นเคยกับ C โดยไม่คำนึงถึง

ที่กล่าวว่าฉันแค่สอน Objective C ให้ตัวเองและฉันต้องพูดตามตรง: ฉันไม่พบว่าประสบการณ์ C ของฉันจะมีประโยชน์อย่างที่ฉันคิด Objective C เปิดหูเปิดตาให้ฉันอย่างแน่นอน


3

คุณสามารถเข้าสู่ Objective-C ได้โดยตรงโดยมีประโยชน์ดังต่อไปนี้:

  1. คุณจะได้เรียนรู้ C "บาง" ในลักษณะนี้
  2. คุณจะได้เรียนรู้ส่วน C ที่เกี่ยวข้องกับคุณ

อย่างน้อยสำหรับฉันก็ง่ายกว่าที่จะเรียนรู้ภาษาใหม่เมื่อฉันสนใจแอพหรือตัวอย่างบางอย่างและฉันก็ล้มเหลวเมื่อต้องเรียนรู้สิ่งอื่นที่ไม่ใช่สิ่งที่ฉันสนใจ

คุณสามารถปรับแต่งความรู้ C ของคุณได้ในภายหลังหากคุณสนใจในการเขียนโปรแกรมระดับล่าง


3

ดีกว่าฉันไม่รู้เลยแม้แต่น้อยเพราะฉันไม่คุ้นเคยกับ Objective-C
แต่ฐานของ C นั้นไม่ยากที่จะเรียนรู้มันไม่ใช่ภาษาที่ซับซ้อนมากนัก (ในแง่ของไวยากรณ์ไม่ใช่ในแง่ของการเรียนรู้!) ดังนั้นไปเลยมันจะไม่เสียเวลา
โดยส่วนตัวแล้วฉันคิดว่าการเรียนภาษา C เป็นความคิดที่ดีเสมอซึ่งจะช่วยให้เข้าใจถึงวิธีการทำงานของคอมพิวเตอร์ได้เป็นอย่างดี ท้ายที่สุดแล้วภาษาและระบบส่วนใหญ่ยังคงเขียนเป็น C จากนั้นไปต่อ! :-)

PS.: โดย "ไปต่อ" ฉันไม่ได้หมายถึง "ทิ้ง" แค่ "เรียนรู้เพิ่มเติม เมื่อคุณรู้จัก C แล้วคุณจะไม่ทิ้งมันไป: Java ใช้ JNI เพื่อเรียกรูทีน C สำหรับสิ่งที่มีระดับต่ำ Python, Lua และอื่น ๆ มักจะขยายด้วยรหัส C (การอ้างอิง Lua แม้จะถือว่าความรู้ C บางอย่างสำหรับบางฟังก์ชันซึ่งเป็นเพียง กระดาษห่อบาง ๆ สำหรับฟังก์ชัน C ด้านหลัง) และอื่น ๆ



2

ตามวิกิพีเดีย Objective-C เป็นชุด super ที่เข้มงวดของ C. ในกรณีนี้ฉันขอแนะนำให้เรียนรู้ C ก่อน จากนั้นเมื่อคุณเรียนรู้ Objective-C จะมีความชัดเจนว่าส่วนใดบ้างที่เพิ่มเข้ามาเป็นส่วนหนึ่งของ Objective-C


2

C ให้นามธรรมจากการประกอบน้อยมาก C Compiler บางตัวจะช่วยให้คุณสามารถประกอบแบบอินไลน์ได้ สิ่งนี้มีประโยชน์มากสำหรับการคิดเกี่ยวกับวิธีการทำงานของคอมพิวเตอร์ซึ่งเป็นสิ่งสำคัญที่ต้องรู้

ตามที่กล่าวไว้หากคุณสนใจ Object-C จริงๆอย่าปล่อยให้ตัวเองจมปลักอยู่กับการเขียนบางสิ่งใน C เพียงเพราะมัน "ดีสำหรับคุณ" คุณไม่จำเป็นต้องหงุดหงิดตัวเองในขณะที่พยายามเรียนรู้ชุดทักษะใหม่ สิ่งสำคัญคือคุณต้องสนุกกับสิ่งที่ทำ


2

คุณต้องการเป็นนักพัฒนาฮาร์ดคอร์หรือไม่? จากนั้นเรียนรู้ c ก่อน

หนังสือที่คุณต้องใช้เพื่อให้เชี่ยวชาญ c เป็นงานเขียนที่ดีที่สุดในด้านเทคโนโลยี นี่คือสิ่งที่คุณต้องการ:

ภาษาโปรแกรมซี

ห้องสมุด Standard C


2

วัตถุประสงค์ C แตกต่างจาก C อย่างเพียงพอเนื่องจากไม่ควรเรียนรู้ C ก่อน

จากมุมมองของไวยากรณ์ / ภาษา - ครอบครัวเราเกือบจะดีกว่าการศึกษา SmallTalk (ซึ่งเป็นไปตามวัตถุประสงค์ C)

จากมุมมองเชิงปฏิบัติให้เน้นความพยายามในการเรียนรู้ทีละภาษา

ในภายหลังหากคุณต้องการเรียนรู้ภาษาอื่น C ++, Java และ Python คือ 1) เรียนรู้ได้ง่ายเป็นกลุ่ม 2) เป็นที่นิยมและเป็นที่ต้องการของตลาด 3) มีประสิทธิภาพ


1
ไม่ Objective-C เป็นชุดย่อยของ C หากไม่มี C คุณจะไม่สามารถทำอะไรใน Objective-C ได้ แน่นอนว่าโมเดลอ็อบเจ็กต์ถูกนำมาจาก smalltalk แต่ไวยากรณ์สำหรับส่วนใหญ่ไม่ได้ปิด
Sven

2

คุณควรมีความรู้พื้นฐานเกี่ยวกับ C ก่อนเริ่ม Objective_C แต่ไม่จำเป็นต้องเชี่ยวชาญในทุกรายละเอียดของ C

ฉันได้เผยแพร่บันทึกของฉันหลังจากอ่าน "Programming in Objective-C" แล้วเผื่อว่าจะช่วยคนอื่นได้

เรียนรู้วัตถุประสงค์ c ด้วยการเขียนโปรแกรม -


1

ขึ้นอยู่กับหลายภาษาที่คุณรู้อยู่แล้วอาจเป็นความคิดที่ดีกว่าที่จะเริ่มเรียนรู้ Objective-C พื้นฐานในภาษาส่วนใหญ่นั้นเหมือนกันโดยพื้นฐานแล้วเป็นไวยากรณ์ที่แตกต่างกัน การเรียนรู้ C อันดับแรกไม่ได้สร้างความแตกต่างมากนักเมื่อพูดถึงการเรียน Objective-C


แต่ถ้ารู้ภาษาโปรแกรมอื่นอย่างน้อยหนึ่งภาษา
Sven

นอกจากความคิดเห็นของ @ Sven: "... ซึ่งมีแนวคิดเกี่ยวกับพอยน์เตอร์"
MANIAK_dobrii

1

ฉันเรียน Objective-C ทันทีและมันก็ใช้ได้ดีมาประมาณหนึ่งปีแล้วฉันเพิ่งมีปัญหาในการอ่านรหัส C เมื่อฉันดาวน์โหลดโครงการเพื่อดูว่ามันทำงานอย่างไร แต่ตอนนี้ฉันรู้สึกว่าจำเป็นต้องเรียนรู้ C จริงๆคุณสามารถลองเรียนรู้ ObjC ไม่มี C แต่ไม่ช้าก็เร็วคุณจะต้องมี C


1

IMHO ควรเรียนรู้ C อย่างน้อยก่อนและโดยเฉพาะอย่างยิ่งเกี่ยวกับคำแนะนำ สิ่งนี้สำคัญยิ่งกว่าถ้าภาษาหนึ่งมาจากภาษาที่ไม่มีคำแนะนำ หลายคนถามเกี่ยวกับรหัสเช่น

NSString *string = [[NSString alloc] init];
string = @"something";

เนื่องจากพวกเขาไม่รู้เกี่ยวกับความแตกต่างระหว่างตัวชี้และวัตถุที่ชี้ไป

แน่นอนว่าเราไม่จำเป็นต้องเรียนรู้C ทั้งหมดก่อนที่จะเริ่มต้นด้วย Objective-C แต่สิ่งพื้นฐานบางอย่างนั้นจำเป็นอย่างยิ่ง


ฉันหวังว่าฉันจะโหวต +10 ครั้งหนึ่งในการสัมภาษณ์ obj-c dev ฉันถูกถามว่าเป็นไปได้ไหมที่จะสร้างตัวชี้ไปที่ NSInteger ... ฉันตกใจมากเพราะนั่นเป็นสิ่งสำคัญสำหรับฉันมาก แต่ดูเหมือนจะไม่ใช่สำหรับทุกคน ดังนั้นนี่จึงเป็นเรื่องสำคัญและง่ายที่จะลืมว่าต้องเข้าใจเรื่องนี้ด้วย
MANIAK_dobrii

0

ห่าไม่ตรงไปที่วัตถุประสงค์ C!

ฉันย้ายจาก ActionScript 3 มาเป็น Objective C และฉันมีนักศึกษาฝึกงานที่ บริษัท แห่งหนึ่งแล้ว!

ทำในสิ่งที่คุณต้องการ


ทำไมคุณถึงพลาดสภาวะของจิตใจเชิงวัตถุโดยสิ้นเชิงและเริ่มเรียนรู้ C ก่อน? มันเหมือนกับการเรียนว่าวและหวังว่าจะเป็นนักบิน คุณต้องรวม OOP ตั้งแต่เริ่มต้น
SwiftArchitect

0

หากคุณเรียนรู้ภาษาอื่นมาก่อนคุณจะมีความสับสนในการเขียนไวยากรณ์ที่ถูกต้อง ฉันไม่รู้จุดประสงค์ แต่ Object C ใช้ไวยากรณ์แปลก ๆ (ไม่ธรรมดา) ในการเรียกเมธอดอ็อบเจ็กต์ มันตั้งชื่อเป็นการส่งข้อความใช่มันเป็นความจริงตามแนวคิด Object Oriented ที่บริสุทธิ์อย่างไรก็ตามชื่อภาษาเชิงวัตถุส่วนใหญ่เป็นวิธีการเรียกและใช้วิธีการเรียกแบบดั้งเดิมมากกว่า การเก็บขยะก็เป็นสิ่งที่แปลกมาก Object C จะขึ้นอยู่กับจำนวนอ้างอิงของโรงเรียนเก่า ดังนั้นคุณจะมีปัญหาในการยอมรับหากคุณเปลี่ยนจากภาษาอื่น ฉันกำลังเขียนหนังสือคู่มือการโยกย้าย Object C ฉบับย่อสำหรับโปรแกรมเมอร์ C / C ++ โดยหวังว่าจะช่วยให้ผู้คนหยิบความแตกต่างทั้งหมดได้เร็วขึ้น


เนื่องจากใน Objective-C "การส่งข้อความ" ไม่ใช่ "การเรียกใช้เมธอด" แต่ในขณะเดียวกันการส่งข้อความก็ทำให้เกิดการเรียกใช้เมธอด (ฟังก์ชัน) =) เมื่อคุณส่งข้อความไปยังวัตถุมันจะส่งผ่านการส่งข้อความ กลไก (คุณสามารถอ่านได้ที่นี่: developer.apple.com/library/ios/documentation/Cocoa/Conceptual/…หรือที่นี่: stackoverflow.com/questions/982116/… )
MANIAK_dobrii
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.