ลูปสามประเภทใน Java

ที่มา: สื่อ หลังจากอ่านโพสต์นี้ คุณจะได้เรียนรู้เกี่ยวกับวิธีต่างๆ ของการวนซ้ำใน Java คอฟฟี่เบรค #154.  ลูปสามประเภทใน Java  JDK 19: คุณสมบัติใหม่ของ Java 19 ที่จะมาในเดือนกันยายน - 1Loop ได้รับการออกแบบมาเพื่อดำเนินการบล็อกโค้ดจนกว่าเงื่อนไขจะเป็นจริง ลูปใน Java มีสามประเภท:
  • ในขณะที่
  • ทำในขณะที่
  • สำหรับ

ในขณะที่วนซ้ำ

การวนซ้ำ while จะเกิดขึ้นซ้ำจนกว่าเงื่อนไขบูลีนที่ระบุจะประเมินเป็นจริง ดังที่แสดงในแผนภาพด้านล่าง คำสั่งจะถูกดำเนินการจนกว่าการทดสอบเงื่อนไขจะคืนค่าเป็นจริง คอฟฟี่เบรค #154.  ลูปสามประเภทใน Java  JDK 19: คุณสมบัติใหม่ของ Java 19 ที่จะมาในเดือนกันยายน - 2

ไวยากรณ์

while (condition true) {
       // Блок codeа
}

ตัวอย่าง

ในที่นี้จะทำการวนซ้ำ while จนกว่าเงื่อนไขจะเป็นจริงสำหรับ x น้อยกว่า 3
public class WhileLoop {
     static int x = 1;
     public static void main(String[] args) {
         while(x < 3) {
             System.out.println("x = "+x);
             x++;
         }
     }
}
บทสรุป:
x = 1 x = 2

ทำในขณะที่วนซ้ำ

การวนซ้ำแบบ do- While นั้นคล้ายกับการวนซ้ำแบบ while โดยมีข้อแตกต่างเล็กๆ น้อยๆ อย่างหนึ่ง การวนซ้ำ do- While จะทำงานหนึ่งครั้งก่อนที่จะทดสอบเงื่อนไขเสมอ คอฟฟี่เบรค #154.  ลูปสามประเภทใน Java  JDK 19: ฟีเจอร์ใหม่ของ Java 19 ที่จะมาในวันที่ 3 กันยายน - 3 กันยายน

ไวยากรณ์

do {
     //  Блок codeа
   } while(condition);

ตัวอย่าง

ในตัวอย่างนี้ คุณจะเห็นว่าคำสั่ง do หรือบล็อกของโค้ดถูกดำเนินการหนึ่งครั้งเสมอก่อนที่จะทดสอบว่าเงื่อนไขเป็นจริงหรือเท็จ
static int x = 5;
        public static void main(String[] args) {
            do {
                System.out.println("x = "+x);
                x++;
            } while(x < 3);
        }
บทสรุป
x = 5

สำหรับวง

for loop นั้นแตกต่างอย่างมากจาก while และ do- While loop ในบรรทัดคำสั่งหนึ่งบรรทัด เรากำหนดการเริ่มต้น เงื่อนไข (จริงหรือเท็จ) การเพิ่มขึ้น/ลดลง คอฟฟี่เบรค #154.  ลูปสามประเภทใน Java  JDK 19: คุณสมบัติใหม่ของ Java 19 จะมาในเดือนกันยายน - 4

ไวยากรณ์

For (initialization; condition; increment/decrement) {
    // Блок codeа
}

ตัวอย่าง

public static void main(String[] args) {
     for(int i = 0 ; i < 2 ; i++) {
         System.out.println("i = " + i);
     }
}
บทสรุป:
ผม=0 ผม=1
การเริ่มต้น: int i = 0 คือเงื่อนไขการเริ่มต้นลูป เงื่อนไข:ตรวจสอบเพื่อดูว่าเงื่อนไขสำหรับการรันบล็อกหรือโค้ดภายใน for loop เป็นจริงหรือไม่ หากเงื่อนไขเป็นเท็จ ก็จะเป็นการสิ้นสุดการวนซ้ำ เพิ่ม/ลด:อัปเดตตัวแปรสำหรับการวนซ้ำครั้งถัดไป

ขยายสำหรับการวนซ้ำ (สำหรับแต่ละ)

มี for loop อีกเวอร์ชันหนึ่งที่มีขนาดกะทัดรัดและอ่านง่ายกว่า for loop แบบธรรมดา เรียกว่าส่วนขยายสำหรับลูป (หรือสำหรับแต่ละลูป) และใช้เพื่อวนซ้ำผ่านคอลเลกชันและอาร์เรย์ สามารถใช้ได้กับออบเจ็กต์ใดๆ ที่ใช้อินเทอร์เฟซ Iterable

ตัวอย่าง

class Main
{
    public static void main(String[] args)
    {
        int[] A = { 1, 2, 3, 4, 5 };

        for (int i: A) {
            System.out.println(i);
        }
    }
}
บทสรุป:
1 2 3 4 5

JDK 19: คุณสมบัติใหม่ของ Java 19 ที่จะมาในเดือนกันยายน

ที่มา: Infoworld นี่คือรายการคุณสมบัติใหม่ที่จะปรากฏใน JDK ที่กำลังจะมาถึง มีกำหนดฉายวันที่ 20 กันยายน 2022 Java Development Kit 19 ซึ่งเป็นรุ่นสนับสนุนระยะสั้นที่มีกำหนดออกในเดือนกันยายน ได้เข้าสู่ขั้นตอนการเปิดตัวแล้ว มีคุณลักษณะเจ็ดประการที่ต้องระวัง: ความขนานที่มีโครงสร้าง เทมเพลตบันทึก การแสดงตัวอย่าง API ต่างประเทศและหน่วยความจำ และการรองรับสถาปัตยกรรมชุดคำสั่ง Linux/RISC-V แบบโอเพ่นซอร์ส (ISA) เนื่องจากคุณสมบัติใหม่ถูกแช่แข็งไว้แล้วสำหรับ JDK 19 คุณสมบัติที่วางแผนไว้อื่นๆ เช่น ข้อมูลทั่วไปและออบเจ็กต์คุณค่า จึงถูกเลื่อนไปเป็นแพลตฟอร์มเวอร์ชันใหม่กว่า โดยปกติแล้ว Java เวอร์ชันใหม่จะออกทุกๆ หกเดือน ผู้สมัครเปิดตัว JDK 19 ได้รับการเผยแพร่เมื่อวันที่ 11 สิงหาคม หลังจากการเปิดตัวทางลาดสองครั้งในเดือนมิถุนายนและกรกฎาคม ผู้สมัครรุ่นที่สองคาดว่าจะในวันที่ 25 สิงหาคม สามารถดาวน์โหลด JDK 19 รุ่นก่อนๆ ได้จากjdk.java.net/19 คุณสมบัติ JDK 19 ประกอบด้วย:
  • โครงสร้างความเท่าเทียม (ระหว่างระยะฟักตัว) ได้รับการออกแบบมาเพื่อทำให้การเขียนโปรแกรมแบบมัลติเธรดง่ายขึ้นโดยใช้ Structured Concurrency API ความเท่าเทียมนี้ถือว่างานหลายงานที่ทำงานบนเธรดที่แตกต่างกันเป็นหน่วยงานเดียว ดังนั้นสิ่งนี้จะช่วยลดความยุ่งยากในการจัดการและการยกเลิกข้อผิดพลาดและความน่าเชื่อถือจะได้รับการปรับปรุงด้วย

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

    นวัตกรรมนี้สร้างขึ้นจากการจับคู่รูปแบบสำหรับอินสแตนซ์ที่เปิดตัวใน JDK 16 ในเดือนมีนาคม 2021 การเปิดตัวในอนาคตอาจกำหนดให้เทมเพลตบันทึกได้รับการขยายด้วยคุณสมบัติต่างๆ เช่น เทมเพลตอาร์เรย์และเทมเพลต vararg

    เทมเพลตโพสต์เป็นส่วนหนึ่งของโครงการ Amberซึ่งมีเป้าหมายเพื่อสำรวจและพัฒนาฟีเจอร์ Java ขนาดเล็กที่เน้นประสิทธิภาพ

  • ดูตัวอย่างเวอร์ชันของฟังก์ชัน API ต่างประเทศและหน่วยความจำ รุ่นใหม่จะแนะนำ API ที่ช่วยให้โปรแกรม Java สามารถโต้ตอบกับโค้ดและข้อมูลภายนอกรันไทม์ Java ได้ ด้วยการเรียกใช้ฟังก์ชันของบุคคลที่สามอย่างมีประสิทธิภาพ (นั่นคือโค้ดภายนอก JVM) และการเข้าถึงหน่วยความจำภายนอกอย่างปลอดภัย (หน่วยความจำที่ไม่ได้จัดการโดย JVM) API จะช่วยให้โปรแกรม Java เรียกใช้ไลบรารีดั้งเดิมและประมวลผลข้อมูลดั้งเดิมโดยไม่มีข้อเสียของ Java อินเทอร์เฟซดั้งเดิม (JNI)

    API ภายนอกและหน่วยความจำรวม API การบ่มก่อนหน้านี้สองรายการ: API การเข้าถึงหน่วยความจำภายนอกและ API ตัวเชื่อมโยงภายนอก ฟังก์ชันต่างประเทศและ API หน่วยความจำถูกบ่มก่อนหน้านี้ใน JDK 17 และบ่มใหม่ใน JDK 18

  • การแสดงตัวอย่าง เธรดเสมือน คุณลักษณะนี้แนะนำเธรดน้ำหนักเบาซึ่งช่วยลดความพยายามในการเขียน การบำรุงรักษา และการตรวจสอบแอปพลิเคชันแบบขนานประสิทธิภาพสูงได้อย่างมาก วัตถุประสงค์ของนวัตกรรมนี้คือเพื่อให้ความสามารถในการปรับขนาดแอปพลิเคชันเซิร์ฟเวอร์ที่เขียนในรูปแบบเธรดต่อคำขอที่เรียบง่าย โค้ดเป้าหมายคุณลักษณะที่ใช้ java.lang Thread API เพื่อแทรกเธรดเสมือนโดยมีการเปลี่ยนแปลงเพียงเล็กน้อย และเพื่อแก้ไขปัญหา ดีบัก และโปรไฟล์เธรดเสมือนโดยใช้เครื่องมือ JDK ที่มีอยู่

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

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

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

  • การฟักตัวครั้งที่สี่ของvector API โดยจะแสดงการคำนวณเวกเตอร์ที่คอมไพล์ ณ รันไทม์ได้อย่างน่าเชื่อถือเป็นคำสั่งเวกเตอร์ที่เหมาะสมที่สุดบนสถาปัตยกรรมโปรเซสเซอร์ที่รองรับ ซึ่งจะให้ประสิทธิภาพที่ดีกว่าการคำนวณสเกลาร์ที่เทียบเท่า นักพัฒนาที่ใช้ API จะได้รับความสามารถในการเขียนอัลกอริธึมเวกเตอร์ที่ซับซ้อนใน Java โดยใช้ autovectorizer ของ HotSpot แต่ด้วยโมเดลแบบกำหนดเองที่ทำให้การทำเวกเตอร์สามารถคาดเดาและเชื่อถือได้มากขึ้น ก่อนหน้านี้ Vector API ได้รับการบ่มใน JDK 16, JDK 17 และ JDK 19

    Vector API จะขยายการดำเนินการเชิงเส้นอินทิกรัลระดับบิต ซึ่งรวมถึงการดำเนินการ เช่น การนับจำนวนบิต การกลับลำดับของบิต และการบีบอัดและการขยายบิต

  • พอร์ต Linux/RISC-V Java จะได้รับการสนับสนุนชุดคำสั่งฮาร์ดแวร์ซึ่งได้รับการสนับสนุนโดยชุดเครื่องมือภาษาที่หลากหลาย ขณะนี้พอร์ต Linux/RISC-V จะสนับสนุนการกำหนดค่า RV64GV RISC-V ซึ่งเป็น ISA วัตถุประสงค์ทั่วไป 64 บิตที่มีคำสั่งเวกเตอร์

    พอร์ตยังรองรับตัวเลือกเครื่องเสมือน HotSpot ต่อไปนี้: ตัวแปลเทมเพลต, คอมไพเลอร์ C1 JIT (ไคลเอนต์), คอมไพเลอร์ C2 JIT (เซิร์ฟเวอร์) และผู้รวบรวมขยะหลักในปัจจุบันทั้งหมด รวมถึง ZGC และ Shenandoah