"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كتابة تطبيق CLI لاختبار سرعة الكتابة في Golang

كتابة تطبيق CLI لاختبار سرعة الكتابة في Golang

تم النشر بتاريخ 2024-11-08
تصفح:374

Writing a Typing Speed Test CLI Application in Golang

هل كان عليك التفكير طويلًا وصعبًا بشأن هذا العنوان؟... الآن بعد أن انتهينا من ذلك، دعنا نكتب بعض التعليمات البرمجية الرتق :)

فرامل المضخات؟ صراخهههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههه.... دعونا نقوم ببعض المقدمة حول ما سنحاول بناءه اليوم. في حالة عدم وضوح العنوان، سنقوم بإنشاء تطبيق CLI يحسب سرعة الكتابة لديك في golang - على الرغم من أنه يمكنك إنشاء نفس التطبيق حرفيًا، باتباع نفس التقنيات في أي لغة برمجة من اختيارك.

الآن، دعونا نرمز إلى ?

package main

import (
    "bufio"
    "fmt"
    "log"
    "math/rand"
    "os"
    "strings"
    "time"
)

var sentences = []string{
    "There are 60 minutes in an hour, 24 hours in a day and 7 days in a week",
    "Nelson Mandela is one of the most renowned freedom fighters Africa has ever produced",
    "Nigeria is the most populous black nation in the world",
    "Peter Jackson's Lord of the rings is the greatest film of all time",
}

في ملف main.go الخاص بنا، نقوم باستيراد الحزم التي سنحتاجها لكتابة المنطق الخاص بنا. نقوم أيضًا بإنشاء شريحة من الجمل. لا تتردد في إضافة مجموعة أخرى.

// A generic helper function that randomly selects an item from a slice
func Choice[T any](ts []T) T {
    return ts[rand.Intn(len(ts))]
}

// Prompts and collects user input from the terminal
func Input(prompt string) (string, error) {
    fmt.Print(prompt)
    r := bufio.NewReader(os.Stdin)

    line, err := r.ReadString('\n')
    if err != nil {
        return "", err
    }

    return strings.Trim(line, "\n\r\t"), nil
}

// Compares two strings and keeps track of the characters  
// that match and those that don't
func CompareChars(target, source string) (int, int) {
    var valid, invalid int

    // typed some of the words
        // resize target to length of source
    if len(target) > len(source) {
        diff := len(target) - len(source)
        invalid  = diff
        target = target[:len(source)]
    }

    // typed more words than required
        // resize source to length of target
    if len(target) 



نواصل بعد ذلك إنشاء وظيفتين ستكونان مفيدتين عندما نكتب منطق التطبيق الخاص بنا.

func main() {
    fmt.Println("Welcome to Go-Speed")
    fmt.Println("-------------------")

    for {
        fmt.Printf("\nWould you like to continue? (y/N)\n\n")
        choice, err := Input(">> ")
        if err != nil {
            log.Fatalf("could not read value: %v", err)
        }

        if choice == "y" {
            fmt.Println("Starting Game...")
            timer := time.NewTimer(time.Second)
            fmt.Print("\nBEGIN TYPING NOW!!!\n\n")
            _ = > ")
            if err != nil {
                log.Fatalf("could not read value: %v", err)
            }

            elasped := timeElapsed(start, time.Now())
            valid, invalid := CompareChars(sentence, response)
            fmt.Print("\nResult!\n")
            fmt.Println("-------")
            fmt.Printf("Correct Characters: %d\nIncorrect Characters: %d\n", valid, invalid)
            fmt.Printf("Accuracy: %d%%\n", accuracy(valid, len(sentence)))
            fmt.Printf("Precision: %d%%\n", precision(valid, invalid))
            fmt.Printf("Speed: %.1fwpm\n", Speed(len(sentence), elasped))
            fmt.Printf("Time Elasped: %.2fsec\n", elasped)
        }

        if choice == "N" {
            fmt.Println("Quiting Game...")
            break
        }

        if choice != "N" && choice != "y" {
            fmt.Println("Invalid Option")
        }
    }
}

في وظيفتنا الرئيسية، نكتب رسالة ترحيب إلى الجهاز وننشئ حلقة لا نهائية لتشغيل برنامجنا. نقوم بعد ذلك بطباعة رسالة تأكيد إلى stdout - الطرفية - مع خيار إنهاء البرنامج. إذا اخترت الاستمرار، فسيتم تحديد جملة من شريحة الجمل المكتوبة مسبقًا والمعروضة في الجهاز بعد تسجيل وقت البدء مباشرةً. نقوم بجمع مدخلات المستخدم وحساب الوقت والسرعة والدقة ثم عرض النتائج مرة أخرى إلى المحطة. تتم إعادة تعيين الحلقة اللانهائية ويتم تشغيل التطبيق مرة أخرى حتى تقوم بإلغاء الاشتراك في البرنامج.

فويلا!!! لقد كتبنا للتو برنامجنا الأول في جولانج.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/hueyemma769/writing-a-typing-speed-test-cli-application-in-golang-371l?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3