Khoảng trắng đáng kể của Python

Lisp, Algol, Pascal, C, v.v. vân vân. được giới hạn bởi BEGIN. KẾT THÚC hoặc theo ký tự ngoặc. Trọng tâm của các ngôn ngữ lập trình ban đầu là khiến máy tính làm những gì chúng ta muốn. Sẽ không có vấn đề gì nếu định dạng trông có vẻ lộn xộn

Nhưng sau đó lập trình đã trở thành một câu chuyện thành công rực rỡ và các chương trình, mô-đun và toàn bộ hệ thống trở nên khổng lồ và khó sử dụng. Cuối cùng, chúng tôi nhận ra rằng làm cho mã trông đẹp mắt đối với người đọc cũng quan trọng như làm cho mã đó dễ hiểu đối với máy tính, bởi vì nếu không thì không ai có thể duy trì mã cũ. Phản ánh cấu trúc logic (lồng) với thụt đầu dòng hóa ra là một cách rất tốt để đạt được điều này. Thụt lề thích hợp đã trở thành một quy tắc tiêu chuẩn của mã sạch

Cuối cùng mọi người nhận ra rằng có thể sử dụng vết lõm để thông báo cho cả lập trình viên và máy tính. với thụt lề thích hợp - điều mà mọi hướng dẫn về phong cách đã nói rằng dù sao bạn cũng nên sử dụng - trên thực tế, bạn có thể bỏ qua BEGIN của Pascal. END, hoặc vùng đất hoang của dấu ngoặc đơn của Lisp hoặc dấu ngoặc của C/Java và khả năng đọc sẽ còn tốt hơn nữa. Điểm cuối cùng này còn gây tranh cãi, nhưng về mặt lịch sử, việc phân định khoảng trắng là điểm cuối của sự phát triển, không phải là tàn dư

$ cat /tmp/t
#!/usr/bin/python3

def fn(x):
        x *= 2
   return x

fn(4)

dstromberg-desktop-dstromberg:~/public_html i486-pc-linux-gnu 25187 - above cmd done 2010 Fri Jan 01 11:14 AM

$ /tmp/t
  File "/tmp/t", line 5
    return x
           ^
IndentationError: unindent does not match any outer indentation level
dstromberg-desktop-dstromberg:~/public_html i486-pc-linux-gnu 25187 - above cmd done 2010 Fri Jan 01 11:19 AM

Khi cuộc nói chuyện rơi vào khoảng trắng đáng kể, phản ứng phổ biến nhất mà tôi nghe được dường như là một trong những phản ứng lệch lạc thần kinh

"Vấn đề thụt lề? Ồ, không. tôi kinh hoàng. "

Tôi luôn tự hỏi tại sao mọi người lại phản ứng như vậy. Vấn đề với khoảng trắng đáng kể là gì?

Nếu được lựa chọn, tôi thích thụt đầu dòng hơn. Theo cách đó, tôi không phải khai báo phạm vi nhiều lần

phạm vi rõ ràng

Nếu phải chọn giữa ba cách triển khai C# sau đây của FizzBuzz kata, bạn sẽ chọn cách nào?

a

class Program
{
static void Main()
{
for (int i = 1; i < 100; i++)
{
if (i % 15 == 0)
{
Console.WriteLine("FizzBuzz");
}
else if (i % 3 == 0)
{
Console.WriteLine("Fizz");
}
else if (i % 5 == 0)
{
Console.WriteLine("Buzz");
}
else
{
Console.WriteLine(i);
}
}
}
}

b

class Program
{
    static void Main()
    {
        for (int i = 1; i < 100; i++)
        {
            if (i % 15 == 0)
            {
                Console.WriteLine("FizzBuzz");
            }
            else if (i % 3 == 0)
            {
                Console.WriteLine("Fizz");
            }
            else if (i % 5 == 0)
            {
                Console.WriteLine("Buzz");
            }
            else
            {
                Console.WriteLine(i);
            }
        }
    }
}

c

class Program { static void Main() { for (int i = 1; i < 100; i++) { if (i % 15 == 0) { Console.WriteLine("FizzBuzz"); } else if (i % 3 == 0) { Console.WriteLine("Fizz"); } else if (i % 5 == 0) { Console.WriteLine("Buzz"); } else { Console.WriteLine(i); } } } }

Bạn thích cái nào trong số này?

bạn thích b. Ai cũng làm

Tuy nhiên, ba ví dụ đó là tương đương. Chúng không chỉ hoạt động giống nhau - ngoại trừ khoảng trắng, chúng còn giống hệt nhau. Chúng tạo ra cùng một cây cú pháp trừu tượng hiệu quả

Mặc dù một ngôn ngữ như C# có phạm vi rõ ràng và kết thúc câu lệnh với dấu ngoặc nhọn và dấu chấm phẩy, việc thụt đầu dòng vẫn quan trọng. Nó không quan trọng với trình biên dịch, nhưng nó quan trọng với con người

Khi bạn định dạng mã như tùy chọn b, bạn thể hiện phạm vi hai lần. Một lần cho trình biên dịch và một lần cho người đọc. Bạn đang lặp lại chính mình

khoảng trắng đáng kể

Một số ngôn ngữ bỏ qua nghi thức và để thụt đầu dòng biểu thị phạm vi. Nổi bật nhất là Python, nhưng tôi có nhiều kinh nghiệm hơn với F# và Haskell. Trong F #, bạn có thể viết FizzBuzz như thế này

[]
let main argv =
    for i in [1..100] do
        if i % 15 = 0 then
            printfn "FizzBuzz"
        else if i % 3 = 0 then
            printfn "Fizz"
        else if i % 5 = 0 then
            printfn "Buzz"
        else
            printfn "%i" i
    0

Bạn không cần phải xác định phạm vi biến hoặc biểu thức một cách rõ ràng. Phạm vi được tự động chỉ định bởi vết lõm. Bạn không lặp lại chính mình. Phạm vi được thể hiện một lần và cả trình biên dịch và con người đều hiểu nó

Tôi đã lập trình trong F # được một thập kỷ rồi và tôi không thấy việc sử dụng khoảng trắng quan trọng của nó là một vấn đề. Tuy nhiên, tôi khuyên bạn nên bật tính năng trong IDE mà bạn chọn để hiển thị các ký tự khoảng trắng

Tóm lược

Khoảng trắng đáng kể là một tính năng ngôn ngữ tốt. Dù sao thì bạn cũng sẽ thụt lề mã của mình, vậy tại sao không để việc thụt lề mang ý nghĩa?

Khoảng trắng có ý nghĩa trong Python không?

Khoảng trắng đáng kể thường được quảng cáo là ưu điểm chính của Python, nhưng trên thực tế nó lại là nhược điểm và không có vấn đề nào không thể giải quyết được .

Python có nhạy cảm với khoảng trắng không?

Python là ngôn ngữ lập trình nhạy cảm với Khoảng trắng sử dụng “dấu cách” và thụt lề thay vì dấu ngoặc nhọn hoặc từ khóa “bắt đầu/kết thúc”. Phiên bản Python được sử dụng trong Earth Volumetric Studio yêu cầu sử dụng khoảng trắng thay vì kết hợp các tab và khoảng trắng để thụt lề.

Tại sao khoảng trắng lại quan trọng trong Python?

Khoảng trắng trong Python . Python hướng đến sự rõ ràng và ưu tiên cao khả năng đọc . Điều này đã dẫn đến một số cú pháp rất ngắn gọn và thân thiện với người dùng. Việc sử dụng khoảng trắng như một yếu tố cú pháp là một phần của.