Chaque dialecte BASIC de base gère les données de type entier et chaîne de caractères. Normalement, ils n'ont pas besoin de les déclarer comme telles, mais les dialectes modernes ont l'option de forcer le type (typiquement en utilisant une directive appelée « Option Explicit »). Les types de données modernes supportés par le BASIC incluent : booléens, entiers signés sur 16 bits, entiers signés sur 32 bits, chaînes de caractères, nombres décimaux. Certains dialectes comme Visual Basic ont plus de types de données intrinsèques. De plus, certains dialectes permettent à l'utilisateur de définir ses propres types, appelés types définis par l'utilisateur, et qui sont actuellement des structures, c'est-à-dire une simple variable contenant plusieurs champs.
Le BASIC n'a généralement pas de bibliothèque externe standard comme d'autres langages, le langage C par exemple. Au lieu de cela, l'Interprète ou le compilateur contiennent une bibliothèque intégrée étendue de procédures intrinsèques. Ces procédures incluent plus d'outils que ce dont le programmeur a besoin pour apprendre la programmation et écrire de simples applications, dont des fonctions mathématiques, des fonctions de traitement des chaînes de caractères, d'entrée-sortie console, de graphisme et de manipulation de fichiers. Le Quick-Basic permet d'inclure des bibliothèques écrites dans ce langage (QLB) ou en d'autres langages (LIB).
Certains dialectes BASIC ne permettent pas aux programmeurs d'écrire leurs propres procédures. À cause de cela, les programmeurs sont obligés d'écrire leurs programmes avec une importante utilisation de goto et de gosub. Ce qui fait qu'il est très difficile de suivre un tel code source, appelé couramment un « code spaghetti ». Beaucoup de versions du BASIC comme le Microsoft Quick Basic ont ajouté un support des sous-routines et des fonctions (avec support de la récursivité). Il fait la distinction entre une procédure qui ne retourne jamais de valeur (appelée sous-routine ou sub) et une procédure qui en renvoie (appelée fonction). Certains langages ne font pas cette distinction et considèrent tout comme une fonction dont certaines renvoient une valeur « vide ».
Le BASIC est bien connu pour ses fonctions de manipulations de chaînes de caractères. Les premiers dialectes avaient déjà un ensemble de fonctions basiques (left$, mid$, right$) pour les traiter simplement. Comme elles sont souvent utilisées dans les applications de tous les jours, cela est un avantage considérable.
10 INPUT "Quel est votre nom"; NOM$ 20 PRINT "Bonjour "; NOM$ 30 INPUT "Combien d'étoiles voulez-vous"; NOMBRE 40 FOR I = 1 TO NOMBRE 50 ETOILE$ = ETOILE$ + "*" 55 NEXT I 60 PRINT ETOILE$ 70 INPUT "Voulez-vous plus d'étoiles"; ETOILE$ 80 IF LEN(ETOILE$) = 0 GOTO 70 90 ETOILE$ = LEFT$(ETOILE$, 1) 100 IF (ETOILE$ = "O") OR (ETOILE$ = "o") THEN GOTO 30 110 PRINT "Au revoir "; 120 FOR I = 1 TO 200 130 PRINT NOM$; " "; 140 NEXT I 150 PRINT
Commentaires :
INPUT "Quel est votre nom"; UserName$
PRINT "Bonjour "; UserName$
DO
INPUT "Combien d'étoiles voulez-vous"; NumStars
Stars$ = ""
Stars$ = REPEAT$("*", NumStars) '<-ANSI BASIC
'Stars$ = STRING$(NumStars, "*") '<-MS BASIC
PRINT Stars$
DO
INPUT "Voulez-vous plus d'étoiles"; Answer$
LOOP UNTIL Answer$ <> ""
LOOP WHILE UCASE$(LEFT$(Answer$, 1)) = "O"
PRINT "Au revoir ";
FOR A = 1 TO 200
PRINT UserName$; " ";
NEXT A
PRINT