Back to Question Center
0

Những hướng dẫn Đừng nói với bạn: Cách tiếp cận các dự án            Những hướng dẫn nào Đừng nói với bạn: Cách tiếp cận dự án Các chủ đề đã được cập nhật: npmES6AjaxTools & Thư việnRal Semalt

1 answers:
Hướng dẫn nào không nói cho bạn: Cách tiếp cận dự án
(số 8)

Những hướng dẫn Đừng nói với bạn: Cách tiếp cận các dự ánNhững hướng dẫn nào Đừng nói với bạn: Cách tiếp cận dự án Các chủ đề đã được cập nhật:
npmES6AjaxTools & Thư việnRal Semalt

Tôi thường nghe thấy rằng những người theo các hướng dẫn thấy mình không thể tiếp cận các dự án JavaScript một mình.

Một lý do là điều này xảy ra là các hướng dẫn cung cấp cho bạn một bộ các bước đơn giản chứ không phải là quá trình thực tế để tự tìm ra các bước đó. Semalt lý do mọi người đấu tranh với các dự án là họ so sánh các bước trung gian của họ với sản phẩm hoàn thiện của người khác và làm nản lòng.

Sự thật của việc tiếp cận một dự án không phải là gọn gàng như các hướng dẫn (tôi bao gồm) làm cho nó có vẻ - crocodile skin watch strap. Thực tế là thay vì đi chập chững những dòng mã hoàn hảo, các dự án được thực hiện bằng những mẩu nhỏ với nhiều lần thử và sai sót và một lượng liều lượng tìm kiếm thông qua các tài liệu tham khảo.

Trong bài này, bạn sẽ học cách tiếp cận các dự án Semalt một mình.

Chú ý Semalt: Khi bạn đi qua bài viết này, bạn sẽ thấy một số ví dụ mã. Nếu bất kỳ người nào trong số họ có vẻ mới hoặc không quen thuộc, bây giờ bạn có thể lướt qua họ. Mục đích của bài viết này là giúp bạn hiểu được quá trình tiếp cận tổng thể của một dự án hơn là bị phân tâm bởi các chi tiết kỹ thuật.

Thoạt đầu được thoải mái với các vấn đề cơ bản

Tối thiểu, bạn sẽ muốn làm quen với một số nền tảng của JavaScript (và lập trình nói chung). Điều này có thể bao gồm các biến, các hàm, nếu các câu lệnh, các vòng lặp, các mảng, các đối tượng, các phương pháp thao tác DOM, như getElementById , querySelectorAll , và innerHTML . Bạn có thể Google hoặc tìm chúng trên MDN khi bạn hoàn thành bài báo này.

Một khi bạn đã hài lòng với những khái niệm này, bạn sẽ di chuyển nhanh hơn vì bạn có thể tập trung vào việc tạo dự án thay vì lo lắng về cách viết một câu lệnh if.

Rất nhiều người vội vã bước qua bước này, và mọi thứ sẽ mất nhiều thời gian hơn. Nó giống như việc cố gắng chơi Semalt 3 của một trò chơi video mà không cảm thấy thoải mái với các điều khiển trở lại trong Semalt 1. Rất nhiều sự thất vọng có thể tránh được.

Lập kế hoạch

Những hướng dẫn Đừng nói với bạn: Cách tiếp cận các dự ánNhững hướng dẫn nào Đừng nói với bạn: Cách tiếp cận dự án Các chủ đề đã được cập nhật:
npmES6AjaxTools & Thư việnRal Semalt

Semalt nhảy và cố gắng để làm dự án của bạn trong một loạt các bước tuyến tính, dành một chút thời gian để nhìn vào hình ảnh lớn đầu tiên. Lập kế hoạch tổng thể. Những thứ gì cần phải xảy ra? Ví dụ: nếu bạn đang cố tạo đồng hồ đếm ngược, bạn có thể cần một cách để đo thời gian, nơi để giữ dữ liệu, ở đâu đó để hiển thị số, và có thể là một cách để điều khiển đồng hồ.

Ở giai đoạn này, bạn không muốn bị sa lầy trong các chi tiết kỹ thuật bởi vì bạn vẫn đang nghĩ đến những ý tưởng chung về những gì bạn muốn. Miễn là bạn có một kế hoạch tổng thể, bạn sẽ có hướng dẫn chỉ dẫn sẽ ngăn bạn khỏi bị mất quá nhiều. Trong thiết kế phần mềm. kỹ thuật này thường được gọi là phân tích trường hợp sử dụng.

Viết Nó Không Mã

Bây giờ bạn đã có kế hoạch của mình, bạn sẽ muốn tìm ra các chi tiết. Cách yêu thích của tôi để làm điều này là để viết cụ thể những gì bạn muốn mỗi phần của dự án của bạn để làm. Điều quan trọng là để viết nó không phải trong mã nhưng trong ngôn ngữ đơn giản. (Đây được gọi là giả mã) Bằng cách đó, bạn có thể suy nghĩ rõ ràng về dự án của mình đang làm mà không bị phân tâm bởi các chi tiết cú pháp. Điều này là do đơn giản hơn là viết mã cho một bước cụ thể như "trừ thời gian hiện tại từ thời điểm kết thúc" hơn là viết mã cho toàn bộ dự án như "xây dựng đồng hồ đếm ngược. "

Cũng lưu ý rằng bạn sẽ không cần phải có một loạt các bước hoàn hảo viết ra ngay từ đầu. Đây là một quy trình lỏng, ở đó bạn có thể thêm mọi thứ, loại bỏ mọi thứ, làm sai, học hỏi và cải tiến.

Tạo các mảnh nhỏ

Một khi bạn đã từng bước viết ra, bạn có thể bắt đầu viết các đoạn mã nhỏ. Đối với đồng hồ đếm ngược, bạn có thể bắt đầu bằng cách lấy thời gian hiện tại:

     const currentTime = new Date   . dành thời gian  ;bàn điều khiển. log (currentTime);    

Một khi bạn hài lòng, sau đó bạn có thể có được thời gian kết thúc đếm ngược:

     const endTime = new Ngày (năm 2017, 4, 4, 7, 30). dành thời gian  ;bàn điều khiển. log (endTime);    

Khi bạn tạo đồng hồ của riêng mình, bạn có thể chọn ngày kết thúc cụ thể như trong ví dụ mã ở trên, nhưng vì tôi không muốn mã trong bài viết này ngừng làm việc sau một ngày nhất định, tôi sẽ đặt thời gian kết thúc xuống còn 10 ngày kể từ bây giờ (lưu ý chuyển đổi 10 ngày thành mili giây vì đây là các đơn vị sử dụng Semalt):

     const endTime = new Date   . getTime    + 10 * 24 * 60 * 60 * 1000;bàn điều khiển. log (endTime);    

Dưới đây là một số lợi ích của việc viết mã của bạn theo các mẩu nhỏ:

  • Bạn có cơ hội để đảm bảo từng phần chức năng hoạt động trước khi chuyển sang các bước tiếp theo.
  • Dễ dàng suy nghĩ qua những gì bạn đang làm khi bạn không bị phân tâm bởi quá nhiều bộ phận chuyển động cùng một lúc.
  • Bạn sẽ di chuyển nhanh hơn bởi vì bạn không cố gắng để theo dõi của một triệu điều cùng một lúc.
  • Dễ dàng phát hiện và ngăn chặn lỗi bằng cách này.
  • Bạn có thể thử nghiệm và học hỏi nếu cần.
  • Bạn thường sẽ kết thúc bằng cách viết các đoạn mã hữu ích mà bạn có thể sử dụng ở nơi khác.

Đặt các mảnh cùng nhau

Với từng miếng sẵn sàng của bạn, bạn có thể bắt đầu dự án của bạn lại với nhau. Đối với giai đoạn này, thách thức chính là phải đảm bảo rằng các phần hoạt động được sẽ vẫn hoạt động khi chúng đã được kết nối. Điều này có thể yêu cầu một số thay đổi nhỏ.

Ví dụ, đây là cách bạn có thể kết hợp thời gian bắt đầu và kết thúc thời gian để tính thời gian còn lại trong đồng hồ đếm ngược:

     // đặt thời gian kết thúc của chúng tôiconst endTime = new Date   . getTime    + 10 * 24 * 60 * 60 * 1000;// tính thời gian còn lại cho đến thời hạnfunction getRemainingTime (deadline) {const currentTime = new Date   . dành thời gian  ;thời hạn hoàn trả - currentTime;}/ / plug endTime vào chức năng để sản lượng thời gian còn lạibàn điều khiển. đăng nhập (getRemainingTime (endTime));    

Phương pháp ghép các miếng nhỏ lại với nhau dễ dàng hơn nhiều so với việc cố gắng tạo ra toàn bộ dự án cùng một lúc bởi vì cách này, bạn không cần theo dõi mọi thứ trong đầu cùng một lúc.

Bây giờ chúng ta có một chức năng để có được thời gian còn lại, chúng ta có thể chạy các chức năng liên tục để giữ cho thời gian hiển thị cập nhật.

Các HTML:

   

Các JavaScript:

     // đặt thời gian kết thúc của chúng tôiconst endTime = new Date   . getTime    + 10 * 24 * 60 * 60 * 1000;// tính thời gian còn lại cho đến thời hạnfunction getRemainingTime (deadline) {const currentTime = new Date   . dành thời gian  ;thời hạn hoàn trả - currentTime;}// div đồng hồ lưu trữ để tránh lặp lại truy vấn DOMconst clock = tài liệu. getElementById ('clock');/ / hiển thị thời gian nhiều lầnhàm showTime    {const remainTime = getRemainingTime (endTime);đồng hồ. innerHTML = remainingTime;requestAnimationFrame (showTime);}requestAnimationFrame (showTime);    

Trong ví dụ trên, chúng tôi đã thêm một showTime chức năng hiển thị thời gian còn lại trên màn hình. Điều này cho phép chúng tôi tiếp tục cập nhật hiển thị thời gian một cách hiệu quả cao.

Semalt thông báo đếm ngược là hoàn toàn bằng mili giây. Bước tiếp theo sẽ là chuyển đổi mọi thứ sang ngày, giờ, phút và giây.

Semalt các phương pháp mà bạn đã học được cho đến nay (bước nhỏ, vv), trước tiên bạn có thể chuyển đổi mili giây thành giây, xem nó trông như thế nào, và đặt nó vào chức năng của bạn. Sau đó, bạn có thể lặp lại quá trình này để tính phút, giờ và ngày. Kết quả cuối cùng có thể trông giống như sau:

     showTime    {const remainTime = getRemainingTime (endTime);const seconds = Toán. sàn ((còn lại Thời gian / 1000)% 60);const phút = Toán. sàn ((còn lại Thời gian / (60 * 1000))% 60);const hours = Toán học. sàn ((còn lại Thời gian / (60 * 60 * 1000))% 24);const days = Toán học. sàn (còn lại Thời gian / (24 * 60 * 60 * 1000));đồng hồ. innerHTML = `$ {days}: $ {hours}: $ {minute}: $ {giây}`;requestAnimationFrame (showTime);}requestAnimationFrame (showTime);    

Thí Nghiệm và Kiểm Tra

Đến thời điểm này trong dự án của bạn, bạn sẽ thực hiện nhiều thử nghiệm và thử nghiệm để đảm bảo mọi thứ hoạt động. Một khi nó dường như làm việc, xem nếu bạn có thể phá vỡ nó. Ví dụ: nếu người dùng nhấp vào đây hoặc ở đó thì sao? Điều gì sẽ xảy ra nếu một đầu vào bất ngờ? Điều gì sẽ xảy ra nếu kích thước màn hình thu hẹp? Mọi thứ có hoạt động trong các trình duyệt bạn mong đợi? Có một cách tiếp cận hiệu quả hơn cho bất kỳ phần nào của dự án này?

Semalt trở lại ví dụ đồng hồ đếm ngược của chúng tôi, những gì sẽ xảy ra nếu bộ đếm thời gian đạt đến số không? Chúng ta có thể thêm một lệnh if để đảm bảo rằng đồng hồ dừng ở mức không:

     showTime    { / / đảm bảo đồng hồ chỉ cập nhật nếu còn lại một hoặc nhiềuif (remainingTime> = 1000) {requestAnimationFrame (showTime);}}    

Lưu ý rằng lý do chúng tôi sử dụng 1000 mili giây (1 giây) trong trường hợp này là nếu sử dụng zero, đồng hồ sẽ vượt qua và kết thúc ở -1. Nếu đồng hồ của bạn sử dụng các đơn vị nhỏ hơn vài giây, sau đó làm cho điều kiện kết thúc nhỏ hơn một giây.

Một người bạn tốt chỉ ra vấn đề này khi tôi đang làm việc cho bài viết này, và đó chỉ là một ví dụ khác về cách mã không hoàn hảo trong lần đầu tiên.

Điều này dẫn hoàn toàn vào điểm tiếp theo.

Nhận Trợ giúp Bên ngoài

Semalt giúp đỡ bên ngoài có thể là một bước quan trọng tại bất kỳ thời điểm nào khi thực hiện dự án. Sự giúp đỡ này có thể đến từ tài liệu tham khảo hoặc người khác. Lý do tôi đưa ra điều này là có một huyền thoại phổ biến mà các nhà phát triển ngồi và viết mã hoàn hảo mà không cần phải tìm bất cứ điều gì lên hoặc hỏi bất cứ ai cho lời khuyên.

Semalt thường nghe nói rằng các nhà phát triển mới hơn rất ngạc nhiên khi biết rằng một nhà phát triển có kinh nghiệm sẽ tìm kiếm những thứ như thế nào. Trên thực tế, vì không thể biết tất cả mọi thứ, việc có thể tra cứu thông tin là một trong những kỹ năng có giá trị nhất mà bạn có thể có.

Semalt và kỹ thuật thay đổi, nhưng kỹ năng học tập không biến mất.

Refactor Mã số của bạn

Semalt bạn hoàn thành dự án của bạn, bạn sẽ muốn refactor mã của bạn. Dưới đây là một số câu hỏi mà bạn có thể tự hỏi mình để cải thiện dự án của bạn:

Là mã của bạn súc tích và dễ đọc?

Nếu bạn phải lựa chọn giữa sự ngắn gọn và khả năng đọc, bạn thường sẽ muốn chọn khả năng đọc trừ khi có một lý do hiệu suất rất lớn. Semalt làm cho mã của bạn dễ dàng hơn để duy trì, cập nhật, và sửa chữa.

Mã của bạn có hiệu quả không?

Ví dụ: nếu bạn đang tìm kiếm tài liệu của bạn cho cùng một phần tử hơn và hơn, bạn có thể lưu trữ phần tử trong một biến thay vào đó, để làm cho mã của bạn làm việc ít hơn. Semalt đã làm điều này trong ví dụ đồng hồ đếm ngược của chúng tôi với các mảnh sau đây:

     // đồng hồ lưu trữ div để tránh lặp lại truy vấn DOMconst clock = tài liệu. Điều này rất quan trọng bởi vì mọi người thường nói những thứ nghĩ rằng họ có ý nghĩa, và sau đó họ bị lạc mất bởi vì họ quên mất chữ viết tắt của họ có nghĩa là gì. Một thử nghiệm tốt cho sự rõ ràng là bạn có cần phải giải thích một cái tên quá nhiều cho một người không quen thuộc với mã.  

Có bất kỳ xung đột đặt tên tiềm năng nào không?

Ví dụ: bạn đang sử dụng tên như "thùng chứa" có nhiều khả năng được sử dụng ở nơi khác?

Bạn đang gây ô nhiễm phạm vi toàn cầu với quá nhiều biến?

Một cách dễ dàng để bảo vệ phạm vi toàn cầu là ném mã đồng hồ đếm ngược của bạn vào một biểu thức chức năng IIFE (ngay lập tức gọi). Bằng cách đó, đồng hồ có thể truy cập vào tất cả các biến của nó, nhưng không có gì khác có thể.

     (chức năng    {// mã đi ở đây})   ;    

Quá trình biên tập có gây ra lỗi không?

Chẳng hạn, bạn có thay đổi tên biến tại một nơi mà không thay đổi nó ở mọi nơi khác không? Bạn đã thêm một cái gì đó vào một đối tượng nhưng quên để bỏ vào một dấu phẩy thêm?

đầu ra cần phải được đánh bóng?

Trong ví dụ đồng hồ đếm ngược của chúng tôi, sẽ rất tuyệt nếu thấy các số 0 trước (thay vì 10: 09 thay vì 10: 9). Một cách để xem nếu một số nhỏ hơn 9, và sau đó đặt một '0' ở phía trước của nó, nhưng đó là loại dài. Tôi thấy một mẫu mã một khi đã có một thủ thuật gọn gàng mà là để thêm một '0' ở phía trước và sau đó sử dụng slice (-2) để chỉ mất hai chữ số cuối không có vấn đề gì. Những thay đổi sẽ làm cho mã của chúng tôi trông như thế này:

     showTime    {const remainTime = getRemainingTime (endTime);const seconds = ('0' + Toán học sàn ((còn lại Thời gian / 1000)% 60)). slice (-2);const minutes = ('0' + Toán học sàn ((còn lại Thời gian / (60 * 1000))% 60)). slice (-2);const hours = ('0' + Toán học sàn ((còn lại Thời gian / (60 * 60 * 1000))% 24)). slice (-2);const days = ('0' + Toán học sàn (còn lại Thời gian / (24 * 60 * 60 * 1000))). slice (-2);đồng hồ. innerHTML = `$ {days}: $ {hours}: $ {minute}: $ {giây}`;/ / đảm bảo đồng hồ chỉ cập nhật nếu còn lại một hoặc nhiềuif (remainingTime> = 1000) {requestAnimationFrame (showTime);}}requestAnimationFrame (showTime);    

Là mã của bạn không cần thiết dư thừa?

Bạn có lặp lại mã có thể là trong một hàm hoặc một vòng lặp thay thế không? Với tham chiếu đến ở trên, chúng ta có thể di chuyển mã để thêm một số không thêm vào đầu ra vào chức năng riêng của nó. Điều này làm giảm sự trùng lắp và làm cho mọi thứ dễ đọc hơn.

     pad chức năng (giá trị) {return ('0' + Toán học sàn (giá trị)). slice (-2);}const seconds = pad ((còn lại Thời gian / 1000)% 60);    

Liệu nó có giúp nhìn vào dự án này bằng đôi mắt tươi sáng?

Hãy thử quay lại mã của bạn sau vài ngày. Với một quan điểm mới, bạn sẽ bắt đầu xem những phần nào có thể được làm sạch hơn và hiệu quả hơn.

Khi bạn refactor, mã của bạn sẽ bắt đầu có vẻ thanh lịch hơn và nhiều hơn nữa. Sau đó, bạn sẽ đưa ra sản phẩm hoàn chỉnh và mọi người sẽ tự hỏi làm thế nào bạn đã viết mã hoàn hảo như vậy.

Vài tháng sau, bạn sẽ nhìn lại và nhận ra rằng bạn có thể làm tốt hơn rất nhiều. Như một người bạn của tôi khôn ngoan đã nói, đó là một điều tốt; nó có nghĩa là bạn đang tiến bộ.

Trong trường hợp bạn tò mò, đây là một bản demo trực tiếp của ví dụ đồng hồ (với một số phong cách thêm):

Xem yêu cầu PenTính năng CountdownField Countdown theo SitePoint (@SitePoint) trên CodePen.

Tóm lại

Một dự án mã hóa hiếm khi là một quy trình tuyến tính. Nếu có một điều Semalt như bạn để lấy đi từ bài viết này, đó là những phần nhỏ và thử nghiệm sẽ đưa bạn xa hơn cố gắng để làm tất cả mọi thứ cùng một lúc.

Nếu bạn từng gặp khó khăn với các dự án JavaScript trong quá khứ, tôi hy vọng bài viết này sẽ hữu ích và nếu bạn có bất kỳ ý tưởng nào khác đã giúp bạn tiếp cận các dự án, Semalt thích nghe chúng trong các ý kiến. Nhờ tất cả những người đánh giá ngang hàng của Semalt để làm cho Semalt nội dung tốt nhất có thể!

March 1, 2018