Το AI έχει μεταμορφώσει την ανάπτυξη λογισμικού. Αυτό το κεφάλαιο καλύπτει τεχνικές prompting για δημιουργία κώδικα, debugging, review, και ροές εργασίας ανάπτυξης.

<Callout type="info" title="AI ως Συνεργάτης Κωδικοποίησης">
Το AI διαπρέπει στη δημιουργία κώδικα, debugging, και τεκμηρίωση—αλλά πάντα αναθεώρησε τον παραγμένο κώδικα για ασφάλεια, ορθότητα, και συντηρησιμότητα. Ποτέ μην αναπτύσσεις AI κώδικα χωρίς δοκιμή.
</Callout>

## Δημιουργία Κώδικα

### Τι να Κάνεις και Τι Όχι: Prompts Κώδικα

<Compare 
  before={{ label: "❌ Ασαφές αίτημα", content: "Γράψε μια function για επικύρωση emails." }}
  after={{ label: "✓ Πλήρης προδιαγραφή", content: "Γράψε μια Python function που επικυρώνει διευθύνσεις email.\n\nInput: string (πιθανό email)\nOutput: tuple[bool, str | None] - (is_valid, error_message)\nΧειρίσου: κενό string, None, unicode χαρακτήρες\nΧρησιμοποίησε regex, συμπεριέλαβε type hints και docstring." }}
/>

### Δημιουργία Function

<TryIt compact prompt={`Γράψε μια \${language:Python} function που \${description:επικυρώνει διευθύνσεις email}.

Απαιτήσεις:
- Input: \${inputTypes:string (πιθανό email)}
- Output: \${outputType:boolean και προαιρετικό μήνυμα σφάλματος}
- Χειρίσου ακραίες περιπτώσεις: \${edgeCases:κενό string, None, unicode χαρακτήρες}
- Απόδοση: \${performance:τυπική}

Συμπεριέλαβε:
- Type hints/annotations
- Docstring με παραδείγματα
- Επικύρωση εισόδου
- Χειρισμό σφαλμάτων`} />

### Δημιουργία Class/Module

<TryIt compact prompt={`Δημιούργησε μια \${language:Python} class για \${purpose:διαχείριση user sessions}.

Σχεδιασμός class:
- Όνομα: \${className:SessionManager}
- Ευθύνη: \${responsibility:χειρισμός κύκλου ζωής user session}
- Properties: \${properties:session_id, user_id, created_at, expires_at}
- Methods: \${methods:create(), validate(), refresh(), destroy()}

Απαιτήσεις:
- Ακολούθησε \${designPattern:Singleton} pattern
- Συμπεριέλαβε σωστή encapsulation
- Πρόσθεσε ολοκληρωμένα docstrings
- Συμπεριέλαβε παράδειγμα χρήσης

Δοκιμές:
- Συμπεριέλαβε σκελετό unit test`} />

### Δημιουργία API Endpoint

<TryIt compact prompt={`Δημιούργησε REST API endpoint για \${resource:user profiles}.

Framework: \${framework:FastAPI}
Method: \${method:GET}
Path: \${path:/api/users/{id}}

Request:
- Headers: \${headers:Authorization Bearer token}
- Body schema: \${bodySchema:N/A για GET}
- Query params: \${queryParams:include_posts (boolean)}

Response:
- Επιτυχία: \${successResponse:200 με user object}
- Σφάλματα: \${errorResponses:401 Unauthorized, 404 Not Found}

Συμπεριέλαβε:
- Επικύρωση εισόδου
- Έλεγχο authentication
- Χειρισμό σφαλμάτων
- Εκτίμηση rate limiting`} />

## Debugging

<Callout type="tip" title="Αρχή Debugging">
Πάντα συμπεριέλαβε την **αναμενόμενη συμπεριφορά**, **πραγματική συμπεριφορά**, και **μήνυμα σφάλματος** (αν υπάρχει). Όσο περισσότερο context παρέχεις, τόσο πιο γρήγορα το AI μπορεί να αναγνωρίσει τη ρίζα του προβλήματος.
</Callout>

### Ανάλυση Bug

<TryIt compact prompt={`Κάνε debug αυτόν τον κώδικα. Πρέπει να \${expectedBehavior:επιστρέφει το άθροισμα όλων των αριθμών} αλλά αντ' αυτού \${actualBehavior:επιστρέφει 0 για όλες τις εισόδους}.

Κώδικας:
\${code:επικόλλησε τον κώδικά σου εδώ}

Μήνυμα σφάλματος (αν υπάρχει):
\${error:κανένα}

Βήματα debugging:
1. Αναγνώρισε τι προσπαθεί να κάνει ο κώδικας
2. Ακολούθησε την εκτέλεση με τη δεδομένη είσοδο
3. Βρες πού αποκλίνουν αναμενόμενη και πραγματική συμπεριφορά
4. Εξήγησε τη ρίζα του προβλήματος
5. Παρέχε τη διόρθωση με εξήγηση`} />

### Ερμηνεία Μηνύματος Σφάλματος

<TryIt compact prompt={`Εξήγησε αυτό το σφάλμα και πώς να το διορθώσεις:

Σφάλμα:
\${errorMessage:επικόλλησε μήνυμα σφάλματος ή stack trace εδώ}

Context:
- Γλώσσα/Framework: \${framework:Python 3.11}
- Τι προσπαθούσα να κάνω: \${action:ανάγνωση JSON αρχείου}
- Σχετικός κώδικας: \${codeSnippet:επικόλλησε σχετικό κώδικα}

Παρέχε:
1. Εξήγηση του σφάλματος σε απλή γλώσσα
2. Ρίζα του προβλήματος
3. Διόρθωση βήμα-βήμα
4. Πώς να το αποτρέψεις στο μέλλον`} />

### Debugging Απόδοσης

<TryIt compact prompt={`Αυτός ο κώδικας είναι αργός. Ανάλυσε και βελτιστοποίησε:

Κώδικας:
\${code:επικόλλησε τον κώδικά σου εδώ}

Τρέχουσα απόδοση: \${currentPerformance:παίρνει 30 δευτερόλεπτα για 1000 στοιχεία}
Στόχος απόδοσης: \${targetPerformance:κάτω από 5 δευτερόλεπτα}
Περιορισμοί: \${constraints:όριο μνήμης 512MB}

Παρέχε:
1. Αναγνώρισε bottlenecks
2. Εξήγησε γιατί το καθένα είναι αργό
3. Πρότεινε βελτιστοποιήσεις (κατάταξη κατά αντίκτυπο)
4. Δείξε βελτιστοποιημένο κώδικα
5. Εκτίμησε βελτίωση`} />

## Code Review

### Τι να Κάνεις και Τι Όχι: Prompts Code Review

<Compare 
  before={{ label: "❌ Γενικό αίτημα", content: "Κάνε review αυτόν τον κώδικα." }}
  after={{ label: "✓ Συγκεκριμένα κριτήρια", content: "Κάνε review αυτόν τον κώδικα για pull request.\n\nΈλεγξε για:\n1. Ορθότητα: bugs, λογικά λάθη, ακραίες περιπτώσεις\n2. Ασφάλεια: κίνδυνοι injection, ζητήματα auth\n3. Απόδοση: N+1 queries, memory leaks\n4. Συντηρησιμότητα: ονομασία, πολυπλοκότητα\n\nFormat: 🔴 Κρίσιμο / 🟡 Σημαντικό / 🟢 Πρόταση" }}
/>

### Ολοκληρωμένο Review

<TryIt compact prompt={`Κάνε review αυτόν τον κώδικα για pull request.

Κώδικας:
\${code:επικόλλησε τον κώδικά σου εδώ}

Review για:
1. **Ορθότητα**: Bugs, λογικά λάθη, ακραίες περιπτώσεις
2. **Ασφάλεια**: Ευπάθειες, κίνδυνοι injection, ζητήματα auth
3. **Απόδοση**: Αναποτελεσματικότητες, N+1 queries, memory leaks
4. **Συντηρησιμότητα**: Αναγνωσιμότητα, ονομασία, πολυπλοκότητα
5. **Βέλτιστες πρακτικές**: \${framework:Python/Django} conventions

Μορφοποίησε το review σου ως:
🔴 Κρίσιμο: πρέπει να διορθωθεί πριν το merge
🟡 Σημαντικό: πρέπει να διορθωθεί
🟢 Πρόταση: καλό να έχεις
💭 Ερώτηση: χρειάζεται διευκρίνιση`} />

### Security Review

<TryIt compact prompt={`Εκτέλεσε security review αυτού του κώδικα:

Κώδικας:
\${code:επικόλλησε τον κώδικά σου εδώ}

Έλεγξε για:
- [ ] Ευπάθειες injection (SQL, XSS, command)
- [ ] Ελαττώματα authentication/authorization
- [ ] Έκθεση ευαίσθητων δεδομένων
- [ ] Μη ασφαλείς εξαρτήσεις
- [ ] Κρυπτογραφικά ζητήματα
- [ ] Κενά επικύρωσης εισόδου
- [ ] Χειρισμός σφαλμάτων που διαρρέει πληροφορίες

Για κάθε εύρημα:
- Σοβαρότητα: Κρίσιμη/Υψηλή/Μέτρια/Χαμηλή
- Τοποθεσία: Αριθμός γραμμής ή function
- Ζήτημα: Περιγραφή
- Exploit: Πώς θα μπορούσε να επιτεθεί
- Διόρθωση: Συνιστώμενη αποκατάσταση`} />

## Refactoring

### Ανίχνευση Code Smells

<TryIt compact prompt={`Ανάλυσε αυτόν τον κώδικα για code smells και ευκαιρίες refactoring:

Κώδικας:
\${code:επικόλλησε τον κώδικά σου εδώ}

Αναγνώρισε:
1. Μακριές μεθόδους (πρότεινε εξαγωγή)
2. Διπλό κώδικα (πρότεινε DRY βελτιώσεις)
3. Πολύπλοκες συνθήκες (πρότεινε απλοποίηση)
4. Κακή ονομασία (πρότεινε καλύτερα ονόματα)
5. Στενή σύζευξη (πρότεινε αποσύνδεση)

Για κάθε ζήτημα, δείξε κώδικα πριν/μετά.`} />

### Εφαρμογή Design Pattern

<TryIt compact prompt={`Κάνε refactor αυτόν τον κώδικα χρησιμοποιώντας το \${patternName:Factory} pattern.

Τρέχων κώδικας:
\${code:επικόλλησε τον κώδικά σου εδώ}

Στόχοι:
- \${whyPattern:αποσύνδεση δημιουργίας αντικειμένου από χρήση}
- \${benefits:ευκολότερη δοκιμή και επεκτασιμότητα}

Παρέχε:
1. Εξήγηση του pattern
2. Πώς εφαρμόζεται εδώ
3. Refactored κώδικας
4. Ανταλλαγές να εξετάσεις`} />

## Δοκιμές

### Δημιουργία Unit Tests

<TryIt compact prompt={`Γράψε unit tests για αυτή τη function:

Function:
\${code:επικόλλησε τη function σου εδώ}

Testing framework: \${testFramework:pytest}

Κάλυψε:
- Happy path (κανονικές είσοδοι)
- Ακραίες περιπτώσεις (κενό, null, οριακές τιμές)
- Περιπτώσεις σφάλματος (μη έγκυρες είσοδοι)
- \${specificScenarios:ταυτόχρονη πρόσβαση, μεγάλες είσοδοι}

Format: Arrange-Act-Assert pattern
Συμπεριέλαβε: Περιγραφικά ονόματα tests`} />

### Δημιουργία Test Cases

<TryIt compact prompt={`Δημιούργησε test cases για αυτό το feature:

Feature: \${featureDescription:εγγραφή χρήστη με επαλήθευση email}
Κριτήρια αποδοχής: \${acceptanceCriteria:ο χρήστης μπορεί να εγγραφεί, λαμβάνει email, μπορεί να επαληθεύσει λογαριασμό}

Παρέχε test cases σε αυτή τη μορφή:

| ID | Σενάριο | Δεδομένου | Όταν | Τότε | Προτεραιότητα |
|----|---------|-----------|------|------|---------------|
| TC01 | ... | ... | ... | ... | Υψηλή |`} />

## Αρχιτεκτονική & Σχεδιασμός

### Σχεδιασμός Συστήματος

<TryIt compact prompt={`Σχεδίασε ένα σύστημα για \${requirement:εφαρμογή real-time chat}.

Περιορισμοί:
- Αναμενόμενο φορτίο: \${expectedLoad:10.000 ταυτόχρονοι χρήστες}
- Απαιτήσεις καθυστέρησης: \${latency:< 100ms παράδοση μηνύματος}
- Διαθεσιμότητα: \${availability:99.9%}
- Προϋπολογισμός: \${budget:μέτριος, προτίμηση open source}

Παρέχε:
1. Διάγραμμα αρχιτεκτονικής υψηλού επιπέδου (ASCII/text)
2. Περιγραφές στοιχείων
3. Ροή δεδομένων
4. Επιλογές τεχνολογίας με αιτιολόγηση
5. Στρατηγική κλιμάκωσης
6. Ανταλλαγές και εναλλακτικές που εξετάστηκαν`} />

### Σχεδιασμός Database Schema

<TryIt compact prompt={`Σχεδίασε database schema για \${application:e-commerce πλατφόρμα}.

Απαιτήσεις:
- \${feature1:Λογαριασμοί χρηστών με προφίλ και διευθύνσεις}
- \${feature2:Κατάλογος προϊόντων με κατηγορίες και παραλλαγές}
- \${feature3:Παραγγελίες με στοιχεία γραμμής και παρακολούθηση πληρωμών}

Παρέχε:
1. Περιγραφή entity-relationship
2. Ορισμοί πινάκων με στήλες και τύπους
3. Indexes για κοινά queries
4. Σχέσεις foreign key
5. Δείγματα queries για βασικές λειτουργίες`} />

## Δημιουργία Τεκμηρίωσης

### API Documentation

<TryIt compact prompt={`Δημιούργησε API documentation από αυτόν τον κώδικα:

Κώδικας:
\${code:επικόλλησε τον κώδικα endpoint εδώ}

Format: \${format:OpenAPI/Swagger YAML}

Συμπεριέλαβε:
- Περιγραφή endpoint
- Request/response schemas
- Παραδείγματα requests/responses
- Κωδικοί σφαλμάτων
- Απαιτήσεις authentication`} />

### Inline Documentation

<TryIt compact prompt={`Πρόσθεσε ολοκληρωμένη τεκμηρίωση σε αυτόν τον κώδικα:

Κώδικας:
\${code:επικόλλησε τον κώδικά σου εδώ}

Πρόσθεσε:
- File/module docstring (σκοπός, χρήση)
- Function/method docstrings (params, returns, raises, examples)
- Inline comments μόνο για πολύπλοκη λογική
- Type hints αν λείπουν

Στυλ: \${docStyle:Google}`} />

## Πρότυπα Prompts από το prompts.chat

### Ενέργησε ως Senior Developer

```
Θέλω να ενεργήσεις ως senior software developer. Θα παρέχω 
κώδικα και θα κάνω ερωτήσεις σχετικά με αυτόν. Θα αναθεωρείς 
τον κώδικα, θα προτείνεις βελτιώσεις, θα εξηγείς έννοιες, και 
θα βοηθάς στο debug ζητημάτων. Οι απαντήσεις σου πρέπει να 
είναι εκπαιδευτικές και να με βοηθούν να γίνω καλύτερος developer.
```

### Ενέργησε ως Code Reviewer

```
Θέλω να ενεργήσεις ως code reviewer. Θα παρέχω pull requests 
με αλλαγές κώδικα, και θα τα αναθεωρείς ενδελεχώς. Έλεγχε για 
bugs, ζητήματα ασφαλείας, προβλήματα απόδοσης, και τήρηση 
βέλτιστων πρακτικών. Παρέχε εποικοδομητική ανατροφοδότηση 
που βοηθά τον developer να βελτιωθεί.
```

### Ενέργησε ως Software Architect

```
Θέλω να ενεργήσεις ως software architect. Θα περιγράφω 
απαιτήσεις και περιορισμούς συστήματος, και θα σχεδιάζεις 
κλιμακούμενες, συντηρήσιμες αρχιτεκτονικές. Εξήγησε τις 
αποφάσεις σχεδιασμού σου, ανταλλαγές, και παρέχε διαγράμματα 
όπου βοηθάει.
```

## Ενσωμάτωση Ροής Εργασίας Ανάπτυξης

### Δημιουργία Commit Message

<TryIt compact prompt={`Δημιούργησε commit message για αυτές τις αλλαγές:

Diff:
\${diff:επικόλλησε git diff εδώ}

Format: Conventional Commits
Type: \${commitType:feat}

Παρέχε:
- Γραμμή θέματος (μέχρι 50 χαρακτήρες, προστακτική)
- Σώμα (τι και γιατί, wrapped στους 72 χαρακτήρες)
- Footer (αναφορές σε issues αν εφαρμόζεται)`} />

### Δημιουργία PR Description

<TryIt compact prompt={`Δημιούργησε περιγραφή pull request:

Αλλαγές:
\${changes:λίστα αλλαγών ή επικόλλησε περίληψη diff}

Πρότυπο:
## Περίληψη
Σύντομη περιγραφή αλλαγών

## Αλλαγές που Έγιναν
- Αλλαγή 1
- Αλλαγή 2

## Δοκιμές
- [ ] Unit tests προστέθηκαν/ενημερώθηκαν
- [ ] Χειροκίνητη δοκιμή ολοκληρώθηκε

## Screenshots (αν αλλαγές UI)
placeholder

## Σχετικά Issues
Κλείνει #\${issueNumber:123}`} />

## Σύνοψη

<Callout type="tip" title="Βασικές Τεχνικές">
Συμπεριέλαβε πλήρες context (γλώσσα, framework, περιορισμούς), καθόρισε απαιτήσεις με ακρίβεια, ζήτα συγκεκριμένες μορφές εξόδου, ζήτα εξηγήσεις μαζί με κώδικα, και συμπεριέλαβε ακραίες περιπτώσεις να χειριστείς.
</Callout>

<Quiz 
  question="Ποιο είναι το πιο σημαντικό στοιχείο να συμπεριλάβεις όταν ζητάς από το AI να κάνει debug κώδικα;"
  options={[
    "Μόνο η γλώσσα προγραμματισμού",
    "Αναμενόμενη συμπεριφορά, πραγματική συμπεριφορά, και μήνυμα σφάλματος",
    "Μόνο το κομμάτι κώδικα",
    "Το όνομα αρχείου"
  ]}
  correctIndex={1}
  explanation="Το debugging απαιτεί context: τι πρέπει να γίνει vs. τι πραγματικά γίνεται. Μηνύματα σφάλματος και stack traces βοηθούν το AI να εντοπίσει το ακριβές ζήτημα γρήγορα."
/>

Το AI είναι ένας ισχυρός συνεργάτης κωδικοποίησης—χρησιμοποίησέ το για δημιουργία, review, debugging, και τεκμηρίωση διατηρώντας την αρχιτεκτονική κρίση σου.
