Hướng dẫn assign in if javascript - chỉ định nếu javascript

Tôi đã chuyển một năm trước từ các ngôn ngữ OO cổ điển như Java sang JavaScript. Mã sau đây chắc chắn không được khuyến nghị [hoặc thậm chí không đúng] trong Java:

if[dayNumber = getClickedDayNumber[dayInfo]]
{
    alert["day number found : " + dayNumber];
}
function getClickedDayNumber[dayInfo]
{
    dayNumber = dayInfo.indexOf["fc-day"];
    if[dayNumber != -1] //substring found
    {
        //normally any calendar month consists of "40" days, so this will definitely pick up its day number.
        return parseInt[dayInfo.substring[dayNumber+6, dayNumber+8]];
    }
    return false;
}

Về cơ bản, tôi chỉ phát hiện ra rằng tôi có thể gán một biến cho một giá trị trong câu lệnh IF điều kiện và ngay lập tức kiểm tra giá trị được gán như thể nó là boolean.

Để đặt cược an toàn hơn, tôi thường tách nó thành hai dòng mã, hãy gán trước sau đó kiểm tra biến, nhưng bây giờ tôi đã tìm thấy điều này, tôi chỉ tự hỏi liệu nó có thực hành tốt hay không trong mắt các nhà phát triển JavaScript có kinh nghiệm?

Carson

4.7002 Huy hiệu vàng30 Huy hiệu bạc40 Huy hiệu đồng2 gold badges30 silver badges40 bronze badges

Hỏi ngày 5 tháng 4 năm 2010 lúc 1:49Apr 5, 2010 at 1:49

Michael Maomichael MaoMichael Mao

9.65823 Huy hiệu vàng75 Huy hiệu bạc91 Huy hiệu Đồng23 gold badges75 silver badges91 bronze badges

1

Tôi sẽ không giới thiệu nó. Vấn đề là, nó trông giống như một lỗi phổ biến khi bạn cố gắng so sánh các giá trị, nhưng sử dụng một

if [value = someFunction[]] {
    ...
}
2 thay vì
if [value = someFunction[]] {
    ...
}
3 hoặc
if [value = someFunction[]] {
    ...
}
4. Ví dụ, khi bạn thấy điều này:

if [value = someFunction[]] {
    ...
}

Bạn không biết đó có phải là những gì họ có nghĩa là làm hay nếu họ có ý định viết bài này:

if [value == someFunction[]] {
    ...
}

Nếu bạn thực sự muốn thực hiện bài tập tại chỗ, tôi cũng khuyên bạn nên thực hiện một so sánh rõ ràng:

if [[value = someFunction[]] === ] {
    ...
}

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 2:05Apr 5, 2010 at 2:05

Matthew CrumLeymatthew CrumleyMatthew Crumley

Huy hiệu vàng 100k2424 gold badges107 silver badges129 bronze badges

9

Tôi thấy không có bằng chứng cho thấy nó không phải là thực hành tốt. Vâng, nó có thể trông giống như một sai lầm nhưng điều đó dễ dàng được khắc phục bằng cách bình luận hợp lý. Lấy ví dụ:

if [x = processorIntensiveFunction[]] { // declaration inside if intended
    alert[x];
}

Tại sao chức năng đó được phép chạy lần thứ 2 với:

alert[processorIntensiveFunction[]];

Bởi vì phiên bản đầu tiên trông tệ? Tôi không thể đồng ý với logic đó.

Borisdiakur

9.3977 Huy hiệu vàng64 Huy hiệu bạc96 Huy hiệu Đồng7 gold badges64 silver badges96 bronze badges

Đã trả lời ngày 13 tháng 3 năm 2013 lúc 6:47Mar 13, 2013 at 6:47

7

Tôi đã làm điều đó nhiều lần. Để bỏ qua cảnh báo JavaScript, tôi thêm hai parens:

if [[result = get_something[]]] { }

Bạn nên tránh nó, nếu bạn thực sự muốn sử dụng nó, hãy viết một nhận xét ở trên nó nói những gì bạn đang làm.

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 1:53Apr 5, 2010 at 1:53

5

Có một trường hợp khi bạn làm điều đó, với ____ 15 vòng. Khi đọc các tệp, bạn thường thích như thế này:
When reading files, you usualy do like this:

void readFile[String pathToFile] {
    // Create a FileInputStream object
    FileInputStream fileIn = null;
    try {
        // Create the FileInputStream
        fileIn = new FileInputStream[pathToFile];
        // Create a variable to store the current line's text in
        String currentLine;
        // While the file has lines left, read the next line,
        // store it in the variable and do whatever is in the loop
        while[[currentLine = in.readLine[]] != null] {
            // Print out the current line in the console
            // [you can do whatever you want with the line. this is just an example]
            System.out.println[currentLine];
        }
    } catch[IOException e] {
        // Handle exception
    } finally {
        try {
            // Close the FileInputStream
            fileIn.close[];
        } catch[IOException e] {
            // Handle exception
        }
    }
}

Nhìn vào ________ 15 vòng ở dòng 9. Ở đó, một dòng mới được đọc và lưu trữ trong một biến, và sau đó nội dung của vòng lặp được chạy. Tôi biết đây không phải là một câu nói 17, nhưng tôi đoán một vòng lặp trong thời gian cũng có thể được đưa vào câu hỏi của bạn.

Lý do cho điều này là khi sử dụng

if [value = someFunction[]] {
    ...
}
8, mỗi khi bạn gọi
if [value = someFunction[]] {
    ...
}
9, nó sẽ đọc dòng tiếp theo trong tệp, vì vậy nếu bạn đã gọi nó từ vòng lặp chỉ bằng
if [value == someFunction[]] {
    ...
}
0 mà không cần gán biến, thay vì gọi
if [value == someFunction[]] {
    ...
}
1 và Sau đó gọi nó từ bên trong vòng lặp, bạn sẽ chỉ nhận được mỗi dòng thứ hai.

Hy vọng bạn hiểu, và chúc may mắn!

User229044 ♦

227K40 Huy hiệu vàng327 Huy hiệu bạc336 Huy hiệu Đồng40 gold badges327 silver badges336 bronze badges

Đã trả lời ngày 29 tháng 11 năm 2014 lúc 14:44Nov 29, 2014 at 14:44

Daniel Kvistdaniel KvistDaniel Kvist

2.9225 huy hiệu vàng26 Huy hiệu bạc49 Huy hiệu đồng5 gold badges26 silver badges49 bronze badges

Nếu bạn tham khảo cuốn sách Martin Fowlers Refactoring cải thiện thiết kế của mã hiện có! Sau đó, có một số trường hợp nó sẽ là thực hành tốt, ví dụ. Các điều kiện phức tạp dài để sử dụng một chức năng hoặc cuộc gọi phương thức để khẳng định trường hợp của bạn:

"Motivation

Một trong những lĩnh vực phổ biến nhất của sự phức tạp trong một chương trình nằm ở logic có điều kiện phức tạp. Khi bạn viết mã vào các điều kiện kiểm tra và làm nhiều việc khác nhau tùy thuộc vào các điều kiện khác nhau, bạn nhanh chóng kết thúc bằng một phương pháp khá dài. Độ dài của một phương pháp tự nó là một yếu tố làm cho nó khó đọc hơn, nhưng điều kiện làm tăng độ khó. Vấn đề thường nằm ở thực tế là mã, cả trong điều kiện kiểm tra và trong các hành động, cho bạn biết điều gì xảy ra nhưng có thể dễ dàng che khuất tại sao nó xảy ra.

Như với bất kỳ khối mã lớn nào, bạn có thể làm cho ý định của mình rõ ràng hơn bằng cách phân tách nó và thay thế các đoạn mã bằng một cuộc gọi phương thức được đặt theo ý định của khối mã đó. > Với các điều kiện bạn có thể nhận được lợi ích thêm bằng cách thực hiện điều này cho phần có điều kiện và từng lựa chọn thay thế. Bằng cách này, bạn làm nổi bật điều kiện và làm cho nó rõ ràng những gì bạn> đang phân nhánh. Bạn cũng làm nổi bật lý do cho sự phân nhánh. "

Và vâng, câu trả lời của anh ấy cũng có giá trị cho việc triển khai Java. Nó không gán hàm có điều kiện cho một biến mặc dù trong các ví dụ.

Đã trả lời ngày 18 tháng 6 năm 2013 lúc 21:03Jun 18, 2013 at 21:03

Allanallanallan

611 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges

Tôi đến đây từ Golang, nơi phổ biến để thấy một cái gì đó giống như

if [err := doSomething[]; err != nil] {
    return nil, err
}

Trong đó

if [value == someFunction[]] {
    ...
}
2 chỉ được đặt vào khối
if [value = someFunction[]] {
    ...
}
7 đó. Như vậy, đây là những gì tôi đang làm trong ES6, có vẻ khá xấu xí, nhưng không tạo ra các quy tắc Eslint khá nghiêm ngặt của tôi, và đạt được điều tương tự.

{
  const err = doSomething[]
  if [err != null] {
    return [null, err]
  }
}

Các niềng răng bổ sung xác định một mới, uh, "phạm vi từ vựng"? Điều đó có nghĩa là tôi có thể sử dụng

if [value == someFunction[]] {
    ...
}
4 và
if [value == someFunction[]] {
    ...
}
2 không có sẵn cho khối bên ngoài.

Đã trả lời ngày 3 tháng 5 năm 2019 lúc 13:15May 3, 2019 at 13:15

Adam Barnesadam BarnesAdam Barnes

2.78019 huy hiệu bạc25 Huy hiệu đồng19 silver badges25 bronze badges

Bạn cũng có thể làm điều này trong Java. Và không, nó không phải là một thực hành tốt. :]

.

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 1:50Apr 5, 2010 at 1:50

Ben Zottoben ZottoBen Zotto

69.5K23 Huy hiệu vàng139 Huy hiệu bạc204 Huy hiệu đồng23 gold badges139 silver badges204 bronze badges

8

Bạn cũng có thể thực hiện các bài tập trong các câu lệnh IF trong Java. Một ví dụ điển hình sẽ là đọc một cái gì đó và viết nó ra:

//www.exampledepot.com/egs/java.io/CopyFile.html?l=new

Mật mã:

if [value = someFunction[]] {
    ...
}
0

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 6:44Apr 5, 2010 at 6:44

NitrodistnitrodistNitrodist

1.5465 huy hiệu vàng23 Huy hiệu bạc34 Huy hiệu đồng5 gold badges23 silver badges34 bronze badges

3

Đó không phải là thực hành tốt. Bạn sẽ sớm bối rối về nó. Nó trông tương tự với một lỗi phổ biến: sử dụng sai "=" và "==".

Bạn nên chia nó thành 2 dòng mã. Nó không chỉ giúp làm cho mã rõ ràng hơn, mà còn dễ dàng tái cấu trúc trong tương lai. Hãy tưởng tượng rằng bạn thay đổi điều kiện nếu điều kiện? Bạn có thể vô tình xóa dòng và biến của bạn không còn nhận được giá trị được gán cho nó.

Đã trả lời ngày 5 tháng 4 năm 2010 lúc 2:30Apr 5, 2010 at 2:30

THETHANGNTHETHANGNthethanghn

3092 Huy hiệu vàng5 Huy hiệu bạc21 Huy hiệu đồng2 gold badges5 silver badges21 bronze badges

3

Bạn có thể làm một cái gì đó như vậy:

if [value = someFunction[]] {
    ...
}
1

Đã trả lời ngày 1 tháng 8 năm 2016 lúc 12:38Aug 1, 2016 at 12:38

Joseph Le Brechjoseph Le BrechJoseph Le Brech

6.47711 Huy hiệu vàng47 Huy hiệu bạc84 Huy hiệu đồng11 gold badges47 silver badges84 bronze badges

Bài Viết Liên Quan

Chủ Đề