Ich weiß zwar nicht, ob schon jemand auf die Idee gekommen ist, eine ganze Bibliothek von Templates zu programmieren und diese sogar schon mal hier bereitgestellt hat, aber trotzdem nehme ich das Risiko auf und möchte auch mein Projekt hier erwähnen.
Beschreibung: Meine Bibliothek soll ähnlich wie die STL (standard template library) in C++ fungieren. Dabei steht jedes Template (eine PBI-Quelldatei) mit einer Hauptquelldatei in Verbindung, die standarisierte Makros, Konstanten und auch Prozeduren beinhaltet. Jedes Template ist so aufgebaut, dass es für jede Plattform verfügbar ist. Natürlich habe ich jetzt nur alles für Windows programmiert, jedoch habe ich schön auf "CompilerSelect"s geachtet (dazu später).
Welche Befehle sollen da noch drinn sein?: Natürlich ist die native PB-Lib sehr umfangreich und ich möchte auch darüber nicht klagen, im Gegenteil. Jedoch gibt es da die ein oder anderen Befehlssammlungen, die meist an eine einzelne Plattform gebunden sind, oder auch einfach nur für eine mit PB entwickelte Engine gedacht sind.
Nun zu euch: Sobald das ganze startbereit ist und ich die nachfolgenden Fragen geklärt habe, würde ich mir sowas wie eine Sammlung von euren Engines und Prozeduren vorstellen. Ihr kennt das wahrscheinlich selbst, wenn ihr in das CodeArchiv geht oder hier im Board sucht. Meistens muss man sich selbst die Mühe geben, um eine Prozedur aus einem Snippet zu basteln. Daher die Idee mit der STL.
Meine Fragen: Da natürlich jeder User seinen eigenen Programmierstil besitzt, muss ich auch wissen, wie ich die Templates, die für den Anfang zustehen, genau aussehen sollen.
1. Der Quelllcodekopf:
Code: Alles auswählen
;**************************************************************
; Dateiname ohne Erweiterung
;
; Authors: Name [, anderer Name ...]
; Copyright (c) 2010 Josef Sniatecki
;**************************************************************
;DEUTSCH:
; Beschreibung
;ENGLISH:
; Description
;...
Vielleicht hat ja der ein oder andere eine Äußerung zum Rahmen. Die Wahl der Sprachen für die Beschreibungen ist frei für den Quellcodeautor und den Übersetzern.
2. Prüfung:
Da ich kein besonderer Fan von "XIncludeFile" bin (sieht mir einfach nicht schön aus ^^) und ich gerne auch explizit prüfen möchte, ob ich einen Quellcode schon eingebunden habe, nutze ich folgenden Code direkt nach dem Header:
Code: Alles auswählen
CompilerIf Defined(Filename_PBI, #PB_Constant) = #False
#Filename_PBI = #True
[... Quellocde ...]
CompilerEndIf
3. Betriebsystem
Falls die jeweilige Quelldatei wirklich nur für ein bestimmtes Betriebsystem verfügbar sein kann, verwende ich immer folgenden Code direkt nach der Prüfung:
Code: Alles auswählen
CompilerIf #PB_Compiler_OS <> #PB_OS_Windows
CompilerError "Only available for Windows."
CompilerEndIf
4. Untertitel:
Code: Alles auswählen
;******************************************
; Title
;******************************************
5. Prozeduren:
Code: Alles auswählen
Procedure.i Name(...)
; Author: Josef Sniatecki
; Gegebenfalls auch Datum (Date: bl.ab.labl)
; Vielleicht Thanks to anybody aus http://www.pure-board.de/ + Thread
;
;DEUTSCH:
; Allgemeine Beschreibung mit Erläuterung der Parameter.
;
;ENGLISH:
; Description with explanation of the parameters.
Code
EndProcedure
Danach folgt die allgemeine Beschreibung in allen Sprachen, die man am besten beherrscht. Dabei setze ich immer die Namen der Parameter zwischen Anführungszeichen. Ich kenn aber auch einige, die gerne eckige Klammern verwernden oder auch garnix.
6. Mehrere Plattformen unterstützen:
Falls mehrere Prozeduren plattformabhängig sind, verwende ich folgendes Schema:
Code: Alles auswählen
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
Procedure.i Bla()
EndProcedure
...
CompilerCase #PB_OS_Linux
...
CompilerEndSelect
7. Namensgebung:
Viele haben bestimmt bereits gemerkt, dass die meisten die Befehle ihrer Engine mit dem Namen starten, dann ein Unterstrich setzen und danach den eigentlichen Befehlsnamen - Davon bin ich kein Freund. Ich versuche immer die Schreibweise von Fred zu verwenden. Falls die Bibliothek einen Eigennamen hat, dann einfach zuerst den Namen verwenden und direkt danach (ohne Unterstrich) den eigentlichen Prozedurnamen.
Beispiel:
Code: Alles auswählen
OpernoDeclareVariable(...)
AddVector(...) ;Vector ist kein Eigenname, deshalb nach "add" setzen
Zu einem "sauberen" Quellcode gehört für mich:
- Leerzeichen zwischen Operatoren ("also 1 + 2 und nicht 1+2")
- Zwei Leerzeichen zum einrücken
- Wenn möglich Übersicht schaffen durch folgende Tricks:
Code: Alles auswählen
abc = 2
a = 3
f(a , b + 1, c)
f(a + 1, b , c)
Code: Alles auswählen
MeinName.s = "Josef"
DiesIstEinLangerName = 123
Info\lpText = @"Bla"
- Kommentare bezüglich zu Anweisungen immer mit einem Satzzeichen beenden.
Und jetzt nicht denken, dass das nur eine Idee ist. Ich habe schon 22 Templates von denen ich oft welche verwende. Ich denke mal, dass jeder selbst sich schon eine kleine oder auch größere Bibliothek mit eigenen Befehlen programmiert hat, daher habe ich daran gedach, dass ganze mal zusammenzuführen, um jeden fortgeschrittenen User das Programmieren noch leichter zu machen.
Und bevor ich weiter programmiere, oder gar schon alles veröffentliche, wollte ich nun um Kommentare und Vorschläge zu dem ganzen Zeugs da oben bitten. Sonst wird das am Ende noch mehr Schreibarbeit als es schon ist.
Gruß Josef