0Pricing
Java Academy · บทเรียน

ข้อจำกัดของ var

ตำแหน่งที่ไม่สามารถใช้ var ได้

ข้อจำกัดของ var เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

var มีกฎการใช้งาน

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

ใช้ได้เฉพาะกับตัวแปรเฉพาะที่

var อนุญาตให้ใช้กับตัวแปรเฉพาะที่เท่านั้น เช่น ภายในเมธอดหรือลูป ตัวอย่างด้านล่างถูกต้องเพราะตัวแปรนี้เป็นตัวแปรเฉพาะที่

public class Main {
    public static void main(String[] args) {
        var greeting = "OK for locals";
        System.out.println(greeting);
    }
}

ใช้กับฟิลด์ไม่ได้

คุณไม่สามารถใช้ var กับฟิลด์ของคลาสได้ ฟิลด์ต้องประกาศชนิดอย่างชัดเจน ตัวอย่างนี้ count เป็นฟิลด์ทั่วไป

public class Main {
    static int count = 0;
    public static void main(String[] args) {
        count = 5;
        System.out.println(count);
    }
}

ใช้กับพารามิเตอร์ของเมธอดไม่ได้

พารามิเตอร์ของเมธอดต้องระบุชนิดอย่างชัดเจน ไม่อนุญาตให้ใช้ var ในรายการพารามิเตอร์ ดังนั้นเมธอดนี้จึงประกาศ String name โดยตรง

public class Main {
    static void greet(String name) {
        System.out.println("Hi " + name);
    }
    public static void main(String[] args) {
        greet("Lee");
    }
}

ใช้เป็นชนิดผลลัพธ์ไม่ได้

ชนิดผลลัพธ์ของเมธอดไม่สามารถเป็น var ได้ แต่ต้องระบุอย่างชัดเจน คอมไพเลอร์จะไม่อนุมานชนิดผลลัพธ์ให้

public class Main {
    static int square(int x) {
        return x * x;
    }
    public static void main(String[] args) {
        System.out.println(square(6));
    }
}

ต้องมีตัวกำหนดค่าเริ่มต้น

คุณไม่สามารถเขียน var x; โดยไม่กำหนดค่าได้ หากไม่มีตัวกำหนดค่าเริ่มต้น คอมไพเลอร์ก็ไม่มีข้อมูลให้อ้างอิงเพื่ออนุมานชนิด ควรกำหนดค่าให้ทันทีเสมอ

public class Main {
    public static void main(String[] args) {
        var ready = true;
        System.out.println(ready);
    }
}

ตัวกำหนดค่าเริ่มต้นเป็น null ไม่ได้

var x = null; ใช้ไม่ได้ เพราะ null ไม่มีชนิดเฉพาะ ให้กำหนดค่าที่มีชนิดแทน เช่น สตริงว่าง

public class Main {
    public static void main(String[] args) {
        var text = "";
        text = "now has a value";
        System.out.println(text);
    }
}

ใช้รูปแบบย่อของตัวกำหนดค่าอาร์เรย์ไม่ได้

คุณไม่สามารถเขียน var nums = {1, 2, 3}; ได้ รูปแบบย่อด้วยวงเล็บปีกกาต้องมีการประกาศชนิดอาร์เรย์ไว้ก่อน ให้ใช้ new int[]{...} แทน

public class Main {
    public static void main(String[] args) {
        var nums = new int[]{1, 2, 3};
        System.out.println(nums.length);
    }
}

ไม่ใช่คำสงวน

ที่น่าสนใจคือ var เป็นชื่อชนิดที่สงวนไว้ ไม่ใช่คำหลัก คุณยังคงตั้งชื่อคลาสว่า var ไม่ได้ แต่กฎนี้มีขอบเขตจำกัด ในทางปฏิบัติให้ถือว่า var เป็นรูปแบบไวยากรณ์สมัยใหม่รูปแบบหนึ่ง

public class Main {
    public static void main(String[] args) {
        var var2 = "identifiers can contain var";
        System.out.println(var2);
    }
}

ใช้แลมบ์ดาที่ไม่มีชนิดเป้าหมายไม่ได้

คุณไม่สามารถกำหนดแลมบ์ดาเปล่าให้กับ var ได้ เพราะแลมบ์ดาต้องมีชนิดอินเทอร์เฟซเชิงฟังก์ชันเป้าหมายเพื่อใช้อนุมานชนิด ให้ประกาศชนิดอินเทอร์เฟซอย่างชัดเจน

import java.util.function.IntUnaryOperator;

public class Main {
    public static void main(String[] args) {
        IntUnaryOperator doubler = x -> x * 2;
        System.out.println(doubler.applyAsInt(21));
    }
}

สรุปข้อจำกัด

โปรดจำขอบเขตการใช้งานไว้: ใช้ได้เฉพาะกับตัวแปรเฉพาะที่ ต้องกำหนดค่าเริ่มต้น ห้ามใช้ null ห้ามใช้แลมบ์ดาเปล่า ห้ามใช้รูปแบบย่อของอาร์เรย์ด้วยวงเล็บปีกกา และใช้กับฟิลด์ พารามิเตอร์ หรือชนิดผลลัพธ์ไม่ได้

public class Main {
    public static void main(String[] args) {
        var ok = 42;
        System.out.println("var is for locals: " + ok);
    }
}

ตรวจสอบอย่างรวดเร็ว

ข้อใดต่อไปนี้เป็นการใช้ var ที่ถูกต้อง

ทบทวน

คุณได้เรียนรู้ข้อจำกัดของ var ดังนี้:

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

คำถามที่พบบ่อย

บทเรียน “ข้อจำกัดของ var” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ข้อจำกัดของ var” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ข้อจำกัดของ var”

ตำแหน่งที่ไม่สามารถใช้ var ได้ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ข้อจำกัดของ var” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การใช้ var กับตัวแปรภายใน
  2. เมื่อ var ช่วยให้อ่านง่าย
  3. var ในลูป for
  4. ข้อจำกัดของ var
← กลับไปที่ Java Academy